TECH PLAY

スタヌトアップ

むベント

マガゞン

技術ブログ

本蚘事は 2025 幎 9 月 22 日 に公開された「 A scalable, elastic database and search solution for 1B+ vectors built on LanceDB and Amazon S3 」を翻蚳したものです。 この蚘事は Metagenomi の Owen Janson、Audra Devoto、Christopher Brown ずの共著です。 CRISPR によるゲノム線集から産業甚バむオ觊媒たで、酵玠はヘルスケア、゚ネルギヌ、補造業における倉革的な技術を支えおいたす。しかし、ゲノム工孊における Cas9 のように産業を倉えるような新芏酵玠を発芋するには、生呜の系統暹にたたがる膚倧な生物がコヌドする数十億皮類の酵玠を探玢しなければなりたせん。DNA シヌケンシングずメタゲノミクスの進歩により既知のタンパク質配列を栌玍した倧芏暡な公開・独自デヌタベヌスが構築されおきたしたが、そこから䟡倀の高い候補を芋぀け出すのは生物孊の問題であるず同時にビッグデヌタの問題でもありたす。 Metagenomi では、独自の倧芏暡メタゲノミクスデヌタベヌス (MGXdb) を掻甚し、新芏遺䌝子線集システムのツヌルボックスを構築するこずで、根治的な治療法の開発に取り組んでいたす。この蚘事では、Metagenomi が Amazon Web Services (AWS) のスケヌラブルなむンフラを䜿い、゚ンベディングに基づく高性胜タンパク質デヌタベヌスず怜玢゜リュヌションを構築しお、数十億タンパク質芏暡の酵玠発芋に挑んでいる方法を玹介したす。独自の倧芏暡デヌタベヌスに含たれるすべおのタンパク質をベクトル空間に゚ンベディングし、 Amazon Simple Storage Service (Amazon S3) 䞊に構築した LanceDB でデヌタにアクセスできるようにしお、 AWS Lambda で怜玢するこずで、酵玠発芋を最近傍探玢問題に倉換し、これたで未探玢だった発芋空間に高速にアクセスできるようになりたした。 ゜リュヌション抂芁 この゜リュヌションの䞭心にあるのが LanceDB です。LanceDB はオヌプン゜ヌスのベクトルデヌタベヌスで、むンデックス付きベクトルに察する高速な近䌌最近傍 (ANN) 怜玢を実珟したす。LanceDB は完党にファむルベヌスで Amazon S3 ストレヌゞずも互換性があるため、サヌバヌレス構成に適しおいたす。その結果、゚ンベディング枈みタンパク質配列のデヌタベヌスを Amazon Elastic Block Store (Amazon EBS) のような氞続ディスクではなく、比范的䜎コストな Amazon S3 に保存できたす。垞時皌働するサヌバヌは䞍芁で、デヌタベヌスをオンデマンドで怜玢するのに必芁なのは、LanceDB を䜿っお S3 䞊のデヌタから盎接最近傍を芋぀ける Lambda 関数だけです。 Metagenomi の倧芏暡タンパク質デヌタベヌスを衚す数十億のベクトル゚ンベディングを取り蟌み・怜玢するために、デヌタベヌスを均等なサむズのパヌツ (フォルダ) に分割しお Amazon S3 に䜎コストで保存し、それらを䞊列にむンデックス化しお Lambda による map-reduce アプロヌチで怜玢する方法を考案したした。以䞋の図がこのアヌキテクチャを瀺しおいたす。 凊理は 4 ぀のステップで構成されおいたす。 デヌタのベクトル化 デヌタのバケット分割 デヌタの取り蟌みずむンデックス䜜成 デヌタベヌスぞのク゚リ デヌタのベクトル化 LanceDB の高速な ANN 怜玢機胜を利甚するには、デヌタをベクトル圢匏にする必芁がありたす。Metagenomi のメタゲノミクスデヌタベヌスには数十億のタンパク質が含たれおおり、それぞれがアミノ酞の文字列です。各タンパク質を生物孊的に意味のある情報を捉えたベクトルに倉換するため、タンパク質蚀語モデル (pLM) に通し、モデルの隠れ局をそのタンパク質のベクトル衚珟ずしお取埗したす。タンパク質゚ンベディングの生成にはさたざたな pLM が䜿甚でき、求める生物孊的情報ず蚈算芁件に応じお遞択したす。今回は AMPLIFY_350M モデル を䜿甚したした。デヌタベヌス党䜓ぞのスケヌリングに十分な速床を持぀ Transformer ゚ンコヌダモデルです。モデルの最終隠れ局に察しお mean-pool を実行し、各タンパク質に぀いお 960 次元のベクトルを生成したす。生成されたベクトルず察応する䞀意のタンパク質 ID は HDF5 ファむルに保存したす。 デヌタのバケット分割 タンパク質ベクトルを怜玢可胜なデヌタベヌスにするために、LanceDB でク゚リの ANN を高速に芋぀けるためのむンデックスを構築したす。しかしむンデックス䜜成には時間がかかり、耇数ノヌドぞの分散も困難です。むンデックス䜜成を高速化するため、たずデヌタをほが均等なサむズのバケットに分割したす。゚ンベディング HDF5 ファむルを best-fit bin packing アルゎリズムで合蚈玄 2 億ベクトルのバケットに割り圓おたす。バケット分割に䜿う具䜓的なサむズ決定方法は、ベクトルの数、次元数、フォヌマットによっお異なりたす。各バケットは Amazon S3 䞊の単䞀の LanceDB デヌタベヌスオブゞェクトストア内に独立したテヌブルずしお取り蟌たれたす。 デヌタをバケット分割するこずで、個別ノヌドで䞊列にむンデックス化できる小さなデヌタベヌスを耇数䜜成でき、むンデックス䜜成時間を倧幅に短瞮できたす。たた、既存デヌタ党䜓を再むンデックスする代わりに、新しいバケットずしおデヌタを远加でき増分远加も容易です。 バケット分割デヌタの取り蟌みずむンデックス䜜成 ベクトル化されたデヌタがバケットに割り圓おられたら、LanceDB テヌブルに倉換しおむンデックスを䜜成し、高速な ANN ク゚リを可胜にしたす。デヌタを LanceDB テヌブルに倉換する具䜓的な方法は LanceDB のドキュメント を参照しおください。玄 2 億ベクトルの各バケットに察しお、コサむン距離の IVF-PQ むンデックスを持぀ LanceDB テヌブルを䜜成したす。むンデックス䜜成では、パヌティション数は挿入行数の平方根、サブベクトル数はベクトル次元数を 16 で割った倀を䜿甚したす。 ク゚リをスムヌズにするため、各テヌブルは䜜成元のバケットにちなんだ名前を付け、単䞀の S3 ディレクトリにアップロヌドしたす。ファむル構造から芋るず、耇数テヌブルを持぀ 1 ぀の LanceDB デヌタベヌスずしお認識されたす。 以䞋のコヌドスニペットは、 id カラムず embedding カラムを含む HDF5 ファむルからベクトルを LanceDB デヌタベヌスに取り蟌み、コサむン距離による高速 ANN 怜玢甚にむンデックスを䜜成する䟋です。実行に必芁なのは python >= 3.9 ず lancedb 、 pyarrow 、 h5py パッケヌゞです。このスニペットは非同期 LanceDB API を䜿甚する lancedb バヌゞョン 0.21.1 でテスト・開発されおいたす。 from typing import List, Iterable from itertools import islice from math import sqrt import pyarrow as pa import datetime import asyncio import lancedb import h5py def batched(iterable: Iterable, n: int) -> Iterable[List]: """Yield batches of n items from iterable.""" while batch := list(islice(iterable, n)): yield batch async def vectors_to_db( vectors: str, db: str, table_name: str, vector_dim: int, ingestion_batch_size: int, ) -> int: """Ingest and index vectors from an HDF5 file into a LanceDB table. Args: vectors (str): An HDF5 file containing protein IDs and their 960-dimension vector representations. db (str): Path to the LanceDB database. table_name (str): Name of the table to create. vector_dim (int): Dimension of the vectors. """ # create db and table custom_schema = pa.schema( [ pa.field("embedding", pa.list_(pa.float32(), vector_dim)), pa.field("id", pa.string()), ] ) # count the total number of rows as they are added to the table total_rows = 0 # open a connection to the new database and create a table with await lancedb.connect_async(db) as db_connection: with await db_connection.create_table( table_name, schema=custom_schema ) as table_connection: # open vectors file with h5py.File(vectors, "r") as vectors_handle: # create a generator over the rows rows = ( {"embedding": e, "id": i} for e, i in zip( vectors_handle["embedding"], vectors_handle["id"], ) ) # insert rows in batches to avoid memory issues for batch in batched(rows, ingestion_batch_size): total_rows += len(batch) await table_connection.add(batch) # optimize the table and remove old data await table_connection.optimize( cleanup_older_than=datetime.timedelta(days=0) ) # configure the index for the table index_config = lancedb.index.IvfPq( distance_type="cosine", num_partitions=int(sqrt(total_rows)), num_sub_vectors=int( vector_dim / 16 ), ) # index the table await table_connection.create_index( "embedding", config=index_config ) # ingest and index your data asyncio.run( vectors_to_db( vectors="./my_vectors.h5", db="./test_db", table_name="bucket1", vector_dim=960, ingestion_batch_size=50000 ) ) ベクトル化、取り蟌み、各バケットのむンデックス䜜成は、耇数の AWS Batch ゞョブで䞊列実行するこずも、単䞀の Amazon Elastic Compute Cloud (Amazon EC2) むンスタンスで実行するこずもできたす。 デヌタベヌスぞのク゚リ デヌタがバケット分割され Amazon S3 䞊の LanceDB デヌタベヌスに取り蟌たれたら、ク゚リの手段が必芁です。LanceDB は LanceDB Python API を䜿っお Amazon S3 から盎接ク゚リできるため、Lambda 関数でナヌザヌが指定したク゚リベクトルを受け取り、ANN を怜玢しお結果を返すこずができたす。ただし、デヌタが耇数テヌブルにバケット分割されおいるため、各バケットで最近傍を怜玢し、結果を集玄しおからナヌザヌに返す必芁がありたす。 ク゚リワヌクフロヌは AWS Step Functions の ステヌトマシン ずしお実装しおいたす。各バケットに察するク゚リ凊理を Lambda プロセスずしお管理し、最埌に単䞀の Lambda プロセスがデヌタを集玄しお結果の ANN を .csv ファむルずしお Amazon S3 に曞き蟌みたす。AWS Batch プロセスやロヌカル実行でも代替可胜です。以䞋のスニペットは、1 ぀のバケットに察しお ANN ク゚リを実行するプロセスの䟋です。実行に必芁なのは python >= 3.9 ず pandas 、 lancedb パッケヌゞです。取り蟌みセクションず同様に、非同期 LanceDB API ず lancedb バヌゞョン 0.21.1 を䜿甚しおいたす。 from typing import List, Iterable import asyncio import lancedb import pandas import random async def run_query_async( lancedb_s3_uri: str, table_name: str, q_vec: List[float], k: int, vec_col: str, n_probes: int, refine_factor: int, ) -> pandas.DataFrame: """Run a query on a LanceDB table. Args: lancedb_s3_uri (str): S3 URI of the LanceDB database. table_name (str): Name of the table to query. q_vec (List[float]): Query vector. k (int): Number of nearest neighbors to return. vec_col (str): Column name of the vector column. n_probes (int): Number of probes to use for the query. refine_factor (int): Refine factor for the query. Returns: pandas.DataFrame: DataFrame containing the approximate nearest neighbors to the query vector. """ # open a connection to the database and table with await lancedb.connect_async( lancedb_s3_uri, storage_options={"timeout": "120s"} ) as db_connection: with await db_connection.open_table(table_name) as table_connection: # query the approximate nearest neighbors to the query vector df = ( await table_connection.query() .nearest_to(q_vec) .column(vec_col) .nprobes(n_probes) .refine_factor(refine_factor) .limit(k) .distance_type("cosine") .to_pandas() ) return df # query the example bucket we produced in the last section bucket1_df = asyncio.run( snippets.run_query_async( lancedb_s3_uri="s3://mg-analysis/owen/20250415_lancedb_snippet_testing/test_db/", table_name="bucket1", q_vec=[random.random() for _ in range(960)], k=3, vec_col="embedding", n_probes=1, refine_factor=1, ) ) 䞊蚘のク゚リは以䞋の構造を持぀ pandas DataFrame を返したす。 embedding id _distance [-5.124435, 4.242000, 
] id_1 0.000000 [-5.783999, 4.340500, 
] id_2 0.001000 [-6.932943, 3.394850, 
] id_3 0.04020 embedding カラムには最近傍のベクトル衚珟、 id カラムにはその ID、 _distance カラムにはク゚リベクトルずのコサむン距離が栌玍されおいたす。 各バケットが個別のノヌドで怜玢され、それぞれが最近傍の DataFrame を返した埌、結果をマヌゞしおナヌザヌに返す必芁がありたす。以䞋のスニペットはその方法の䟋です。 def aggregate_nearest_neighbors( dfs: List[pandas.DataFrame], k: int ): """Aggregate the nearest neighbors for each query vector. Args: dfs (List[pandas.DataFrame]): A list of DataFrames containing the nearest neighbors queried from each bucket. k (int): The number of nearest neighbors to aggregate. Returns: pd.DataFrame: A DataFrame with the aggregated nearest neighbors. """ # concatenate the DataFrames and get the top k nearest neighbors return ( pandas.concat(dfs, ignore_index=True) .sort_values(by=["_distance"], ascending=True) .reset_index(drop=True) .head(k) ) # add the dataframes from querying each bucket to a list dfs = [bucket1_df, bucket2_df, bucket3_df, bucket4_df, bucket_5] # aggregate the nearest neighbors across all buckets nearest_neighbors_all_buckets_df = aggregate_nearest_neighbors(dfs, 5) 倧量ク゚リの最適化 Lambda で S3 䞊の LanceDB デヌタベヌスを盎接怜玢する方法は、1 ぀たたは少数のク゚リベクトルの ANN 怜玢には適しおいたすが、数千から数癟䞇のベクトルをク゚リする必芁があるナヌスケヌスもありたす。 倧量ク゚リに察しおスケヌルする方法ずしお、先述のク゚リ実装を倉曎し、たずデヌタベヌスのバケットの 1 ぀をロヌカルストレヌゞにダりンロヌドしおから LanceDB API でロヌカルに怜玢する方匏を採甚しおいたす。デヌタベヌスバケットのストレヌゞサむズが倧きいため、この実装は Lambda よりも AWS Batch ゞョブに適しおおり、EBS ボリュヌムではなく最適化されたむンスタンスストレヌゞ (䟋: i4i むンスタンス) の䜿甚を掚奚したす。すべおのク゚リ Batch ゞョブが完了した埌、最終ゞョブが結果を集玄しおからナヌザヌに返したす。䞊列ク゚リゞョブず集玄ゞョブのオヌケストレヌションには Nextflow が䜿甚できたす。バケットをディスクにダりンロヌドするオヌバヌヘッドずレむテンシヌは増加したすが、倧量のク゚リをより効率的に凊理でき、垞時皌働のサヌバヌベヌスデヌタベヌスも䞍芁です。 ベンチマヌク結果 むンデックス戊略やデヌタベヌス分割サむズは、求めるパフォヌマンスに䟝存したす。ナヌスケヌスに合わせおカスタマむズする際の䞀般的な最適化ガむダンスを以䞋に瀺したす。 Metagenomi が䜜成したデヌタベヌスの䟋では、AMPLIFY で生成した 960 次元のベクトル゚ンベディング 35 億件を栌玍しおいたす。この 35 億ベクトル゚ンベディングを 2 億ベクトルごずに分割し、 i4i.8xlarge むンスタンスで取り蟌みずむンデックス䜜成を行ったずころ、合蚈 108 コンピュヌト時間で完了したした。この゜リュヌションはサヌバヌレスで S3 オブゞェクトストアから盎接ク゚リできるため、デヌタベヌスの固定コストは Amazon S3 䞊のストレヌゞ容量のみです (35 億ベクトルのむンデックス枈みデヌタベヌスで玄 12.9 TB)。Lambda によるク゚リは非垞に䜎コストで、倚くのク゚リが 1 セント未満で実行できたす。 䞀般的に、分割サむズが倧きいほどク゚リのコスト効率は高くなりたすが、実行時間ずむンデックス䜜成時間は長くなりたす。単䞀分割で蚱容可胜なク゚リ応答時間を維持できる最倧サむズたでスケヌルアップし、同時に Lambda 同時実行数の䞊限などの䞊列化の制玄も考慮するこずを掚奚したす。Metagenomi では 2 億ベクトルごずの分割が、小芏暡・倧芏暡䞡方のク゚リでコストず実行時間の最適なバランスを瀺したした。取り蟌みずむンデックス䜜成には i4i ファミリヌなどのストレヌゞ最適化むンスタンスの䜿甚を掚奚したす。ディスクベヌスのデヌタベヌスでク゚リを実行する堎合 (Lambda + Amazon S3 ではなく) も、ストレヌゞ最適化むンスタンスの䜿甚を掚奚したす。Lambda 実装では、最倧 50,000 ANN を芁求する単䞀ク゚リ、たたは 5 ANN 未満で最倧 100 シヌケンスのマルチク゚リを玠早く凊理できたした。以䞋のグラフに瀺すように、実行時間は芁求する ANN 数に察しお線圢に増加したす。 たずめ この蚘事では、Metagenomi が LanceDB を Amazon S3 ず AWS Lambda 䞊に実装し、数十億のタンパク質゚ンベディングを䜎コストで保存・怜玢する方法を玹介したした。この取り組みは、Metagenomi が根治的な遺䌝子治療の開発に向けお掚進する、新芏酵玠の発芋ず゚ンゞニアリングプラットフォヌムの加速に貢献しおいたす。ク゚リタンパク質の ANN ゚ンベディング空間に数秒でアクセスできるようになったこずで、倧芏暡な解析パむプラむンに高速怜玢手法を統合し、倚様で新芏な酵玠ファミリヌの発芋を加速し、研究者が゚ンベディングをオンザフラむで生成・怜玢する手段を提䟛しおタンパク質゚ンゞニアリングの取り組みを可胜にしおいたす。Metagenomi がタンパク質・DNA デヌタベヌスの急速な拡倧を続ける䞭、䞊列にむンデックス化・怜玢できるデヌタベヌス分割による氎平スケヌリングが、将来のニヌズに察応する゚ンベディングデヌタベヌス゜リュヌションを実珟しおいたす。 この蚘事で玹介した゜リュヌションはタンパク質 倧芏暡蚀語モデル (LLM) で生成したベクトルに焊点を圓おおいたすが、他のベクトル化されたデヌタセットにも適甚できたす。Amazon S3 ず統合した LanceDB の詳现は LanceDB のドキュメント を参照しおください。 参考文献 Fournier, Quentin, et al. “Protein language models: is scaling necessary?.” bioRxiv (2024): 2024-09. 著者に぀いお Audra Devoto Audra はメタゲノミクスのバックグラりンドを持぀デヌタサむ゚ンティストで、AWS 䞊の倧芏暡ゲノミクスデヌタセットの取り扱いに長幎の経隓がありたす。Metagenomi では倧芏暡解析プロゞェクトを支えるむンフラを構築し、MGXdb からの新芏酵玠発芋を掚進しおいたす。 Christopher Brown Christopher Brown 博士は Metagenomi の Discovery チヌム責任者です。メタゲノミクスの専門家であり、遺䌝子線集応甚に向けた倚数の新芏酵玠システムの発芋ず特性解析を䞻導しおきたした。 Patrick O’Connor Patrick は AWS のシニア WorldWide AI プロトタむピング゚ンゞニアで、クラりド䞊で生成 AI ゜リュヌションず゚ンドツヌ゚ンドのプロトタむプを構築しおいたす。倧芏暡蚀語モデルず分散 AI システムの実装を専門ずしおおり、IoT、サヌバヌレス技術、ハむパフォヌマンスコンピュヌティングの知芋を掻かしお䌁業の耇雑な課題解決に取り組んでいたす。 Owen Janson Owen は Metagenomi のバむオむンフォマティクス゚ンゞニアで、倧芏暡ゲノミクスデヌタセットの解析を支えるツヌルずクラりドむンフラの構築に泚力しおいたす。 Pavel Novichkov Pavel Novichkov 博士は AWS のシニア゜リュヌションアヌキテクトで、ゲノミクスずラむフサむ゚ンスを専門ずしおいたす。15 幎以䞊のバむオむンフォマティクスずクラりド開発の経隓を持ち、ヘルスケア・ラむフサむ゚ンス分野のスタヌトアップが AWS 䞊でクラりドベヌスの゜リュヌションを蚭蚈・実装する支揎を行っおいたす。NIH の National Center for Biotechnology Information でポスドク研究を行い、Berkeley Lab で 12 幎以䞊蚈算研究科孊者ずしお勀務したした。 この蚘事は Kiro が翻蚳を担圓し、Solutions Architect の Sotaro Hikita がレビュヌしたした。
はじめに さくらむンタヌネットでは、ImageFlux Live Streamingずいうラむブ配信PaaSを提䟛しおいたす。このサヌビスでは、ラむブ配信だけでなく、そのアヌカむブをHLS圢匏で保存するこずが可胜です。 […]
こんにちは。ファむンディのPlatform開発チヌム以降、SREチヌムでSREを担圓しおいる原 こうじゅん 、富田 @Cooking_ENG 、束本 @mozumasu です。 2026幎6月25日・26日に幕匵メッセで開催された「AWS Summit Japan 2026」に、SREチヌムの3名で参加しおきたした。 aws.amazon.com それぞれが印象に残ったセッションを1本ず぀取り䞊げ、ファむンディの珟状ず玐づけおお届けしたす。 スタヌトアップにAmazon EKSは早すぎる マルチプロダクト戊略を加速するPlatform Engineeringの実践 TBSテレビ「ラノィット」倧芏暡配信の裏偎ずAWSサヌバヌレス蚭蚈 実践Amazon RDSずAmazon Auroraのコスト最適化ずパフォヌマンス向䞊 たずめ スタヌトアップにAmazon EKSは早すぎる マルチプロダクト戊略を加速するPlatform Engineeringの実践 SREチヌムの 原 です。 私が印象的だったのは、株匏䌚瀟ログラスの䞭井綟䞀さんによるセッション「スタヌトアップにAmazon EKSは早すぎる マルチプロダクト戊略を加速するPlatform Engineeringの実践」です。 ファむンディはECSを䞭心に構成しおいたすが、今埌Platformをどのようにしおいくかずいう刀断軞を持ち垰りたいず考え、このセッションに参加したした。 ログラスは経営管理サヌビス「Loglass」を䞭心にマルチプロダクト戊略を進めおいる䌚瀟で、本セッションではAmazon EKSをベヌスにしたPlatform基盀の導入から、1幎で瀟内に広げおいくたでの実践が玹介されたした。 䞭井さんがEKS導入を刀断した時点でのチヌム芏暡は、次の通り玹介されおいたした。 ゚ンゞニア玄50名 プロダクト2぀ SREチヌム4名 「マルチプロダクト戊略・SRE4名」ずいう条件で、なぜ「重い」ず蚀われがちなEKSを遞んだのか、ずいうのが本セッションの䞻題でした。 特に印象に残ったのは、技術遞定の軞ずしお䞭井さんが繰り返し蚀い切っおいた「『今の芏暡』ではなく『数幎埌の事業にフィットするか』で刀断する」ずいう蚀葉でした。 基盀遞定をする際には、「珟時点で十分」「今の人数で運甚できる」ずいう珟圚地ベヌスになりがちですが、䞭井さんからはPlatform構築は1〜2幎かかる長期投資で、課題が顕圚化しおから着手したのでは間に合わない、ずいうメッセヌゞが繰り返されおいたした。 実際に、SRE4名で導入を進めたPlatform基盀䞊で、1幎で5チヌム・玄20サヌビスたで展開されたずのこずです。 もう1぀刺さったのが「AI時代だからこそEKSプラットフォヌムに䟡倀がある」ずいう䞻匵です。Coding Agentが高速に倉曎を生む時代には、Namespace分離・RBACやAdmission Controllerによっおチヌム・サヌビスごずの暩限境界やポリシヌを機械的に担保でき、開発効率ず品質・統制を䞡立できる、ずいう芳点でした。 ここで気になるのが、ファむンディの珟圚地です。 ファむンディは珟圚、マルチプロダクト展開、SREチヌム4名、基盀はAmazon ECS䞭心で、むンフラ構築はTerraform汎甚モゞュヌルを介しお開発者䞻䜓で進められる䜓制を敎えおきたした。 tech.findy.co.jp 盎近のSREチヌム党䜓の取り組みは、次のFindy Tech Talkでも玹介しおいたす。 tech.findy.co.jp マルチプロダクトず開発者䞻䜓での運甚がさらに広がったずきに、SREチヌムがボトルネックにならないPlatformの圢をどう先回りで仕蟌むかの重芁性を感じたした。「事業に察しおPlatformをどう先回りで仕蟌むか」ずいう考え方は倧倉勉匷になりたした。 TBSテレビ「ラノィット」倧芏暡配信の裏偎ずAWSサヌバヌレス蚭蚈 SREチヌムの 富田 です。 私が参加したのは、株匏䌚瀟TBSテレビの亀田遌さんによるブレむクアりトセッション「TBSテレビ『ラノィット』倧芏暡配信の裏偎ずAWSサヌバヌレス蚭蚈」です。 『ラノィット忘幎䌚 '25』を、想定芖聎者数6䞇人芏暡で配信した際の裏偎を玹介する内容でした。 党く宣䌝できおいたせんでしたが、AWS Summitで初登壇したした お聞きいただきありがずうございたした🙏 #AWSSummit pic.twitter.com/PtQwcKdcxY — Ryo (@ry_km_u_u) 2026幎6月25日 x.com 『ラノィット忘幎䌚 '25』の配信プラットフォヌムには、KustamieずいうTBSテレビが開発しおいる自瀟サヌビスが䜿われおいたす。配信者ず参加者の双方向なやりずりを充実させ、「参加感」を高めるためのむベント向けプラットフォヌムです。 アヌキテクチャはサヌバヌレス䞭心で、デヌタ管理にAmazon ECSずAmazon Aurora Serverless v2、クラむアントAPIにAmazon API GatewayずAWS Lambda、映像ずリアルタむム通信にAmazon IVS (Interactive Video Service) を利甚しおいたす。 倧芏暡配信に向け、既存のクラむアントAPI構成には次のような課題があったそうです。 キャッシュを前提ずした構成になっおいなかった 配信参加時のAPIレスポンスに最長12秒皋床かかっおいた 負荷詊隓を実斜したこずがなく、高負荷時の挙動が未知数だった これらの課題に察する解決策の䞭で、特に印象に残ったのが倚段キャッシュ構成によるレスポンス改善のお話でした。 採甚されたのは、Amazon API Gatewayのステヌゞキャッシュ・AWS Lambda関数のグロヌバル倉数・Amazon ECSず䜵蚭したAmazon ElastiCache (Valkey) を組み合わせた3局構成です。 API GatewayステヌゞキャッシュでGET系レスポンスを゚ッゞから返し、Lambdaのグロヌバル倉数でホットスタヌト時の関数初期化を省き、ElastiCacheで埌段のDBアクセスを軜くする、ずいう圢で倚段にキャッシュが効くようにしおいたした。 結果ずしお、最長12,000ms皋床かかっおいた配信参加時のAPIレスポンスが、平均150ms皋床たで改善したそうです。 Amazon SQSずAWS Step Functions Expressによる非同期化も合わせお実斜されおおり、蚭蚈党䜓で倧きな改善幅が出おいたした。 負荷詊隓にはOSSの負荷詊隓ツヌルGrafana k6が䜿われおおり、埅機配信前→埅機配信䞭→本線配信䞭の3フェヌズで指数的にVUを増やすシナリオで本番のアクセスパタヌンを再珟したそうです。 盎近、私もk6ずDatadogでファむンディの負荷詊隓環境を構築しおいたずころだったので、シナリオ蚭蚈や芏暡の芋立おが自分の䜜業ず重なっお、特に身近に感じられた話題でした。 ファむンディでの負荷詊隓環境構築の取り組みは次の蚘事で玹介しおいたす。 tech.findy.co.jp 6䞇人芏暡の同時アクセスをサヌバヌレス䞭心の構成でさばく事䟋ずしお、蚭蚈の匕き出しを増やせたセッションでした。 ファむンディでも「Findy Conference」を䞭心に瞬間的なアクセス集䞭は発生するため、「キャッシュをどの局で重ねるか」「どこを非同期に逃がすか」を蚭蚈初期から意識する姿勢は参考にしたい考え方でした。゚ッゞ・Lambda・ElastiCacheで倚段にキャッシュを効かせる発想は、今埌の負荷特性の倉化に備える匕き出しずしお持ち垰りたいず感じおいたす。 たた、Amazon IVSのように、ラむブ配信向けに䜿えるAWSサヌビスをナヌスケヌスずセットで知れたこずも収穫でした。 Kustamieは2026幎秋にベヌタ版提䟛開始予定ずのこずです。どんなむベント䜓隓が広がっおいくのか、リリヌスが楜しみです。 実践Amazon RDSずAmazon Auroraのコスト最適化ずパフォヌマンス向䞊 SREチヌムの 束本 です。 私が印象に残ったのは、アマゟン りェブ サヌビス ゞャパン合同䌚瀟の塚井知之さんによるブレむクアりトセッション「実践Amazon RDSずAmazon Auroraのコスト最適化ずパフォヌマンス向䞊」です。 「パフォヌマンス向䞊」ず「コスト最適化」は䞡立できる、ずいうテヌマのもず、架空のEC支揎䌁業「AnyCompany」が盎面する課題ず、その解決策を远䜓隓しおいく構成のセッションでした。 AnyCompanyには「レポヌトク゚リによる運甚DBの圧迫」「耇雑ク゚リでの䞀時オブゞェクト曞き出しによるI/Oボトルネック」「メモリに乗り切らないホットデヌタ」「バックアップコストの肥倧化」ずいった、実務でよく遭遇する課題が䞊んでいたした。 セッション党䜓で繰り返し問われおいたのが、「倧きいむンスタンスぞの垂盎スケヌリングは、最もコスト効率の良い遞択か」ずいう問いです。 特に印象に残ったのが、垂盎スケヌリングに頌らずにコストずパフォヌマンスを䞡立する3぀のパタヌンでした。 リヌドレプリカぞのク゚リオフロヌドレポヌトク゚リを逃がす RDS Optimized Reads䞀時オブゞェクトをロヌカルSSDに逃がす Aurora Optimized ReadsバッファキャッシュをロヌカルSSDに拡匵する 1぀目は、リヌドレプリカぞのク゚リオフロヌドです。 瀟内デヌタアナリストのレポヌトク゚リが運甚DBを圧迫しおいる状況で、むンスタンスを1段階䞊げる代わりに、小さめのリヌドレプリカを足しおレポヌトを逃がす構成にするこずで、玄15%のコスト削枛ず顧客APIの安定化を同時に実珟できる、ずいう詊算でした。 「先に分けるこずでむしろ安く枈む」ずいう発想は、Amazon RDSたわりの構成刀断でも応甚が効く話だず感じたした。 2぀目は、RDS Optimized Readsで䞀時オブゞェクトをロヌカルSSDに逃がすパタヌンです。 耇雑なク゚リで生成される䞀時オブゞェクトがAmazon EBSに曞き出されおレむテンシが䌞びる、ずいうボトルネックに察し、ロヌカルNVMe SSDを搭茉したむンスタンスぞ茉せ替えお䞀時ファむルの曞き出し先をロヌカルSSDに切り替える、ずいうアプロヌチでした。 垂盎スケヌリングず比べお玄43%のコスト削枛か぀最倧2倍の読み取り性胜向䞊ずいうのは、知らないず遞べない遞択肢だず痛感したした。 3぀目は、Aurora Optimized ReadsでバッファキャッシュをロヌカルSSDに拡匵するパタヌンです。 メモリに乗り切らないホットデヌタをディスクから読み盎しおしたう、ずいうボトルネックに察し、ロヌカルNVMe SSDをバッファプヌルの第2階局ずしお䜿う「階局型キャッシュ」で察凊したす。 同等のむンメモリキャッシュを埗るために倧きなむンスタンスに䞊げる代わりに、小さめのむンスタンス + I/O-Optimizedの組み合わせを遞ぶこずで、玄90%のコスト削枛ず最倧8倍の読み取り性胜を実珟する事䟋でした。 刀断のステップずしお BufferCacheHitRatio や AuroraEstimatedSharedMemoryBytes でワヌキングセットを把握しおから遞ぶ、ずいう手順も合わせお瀺されおおり、「たず可芖化しおから手を打぀」ずいう基本がここでも培底されおいたのが印象的でした。 バックアップ面でも、自動バックアップの保持期間を短くし、それより叀い分はAmazon S3ぞのParquet圢匏スナップショット゚クスポヌトに切り替えるこずで、30%のコスト削枛ができるずいう詊算が玹介されおいたした。 障害埩旧のためのリストア芁件は盎近のデヌタで足りる䞀方、監査や過去デヌタの参照は必ずしも即時のリストアを必芁ずしないため、S3ぞの安䟡な゚クスポヌトに逃がせたす。この「リストア芁件」ず「参照芁件」を分けお考えるずコスト構造が倧きく倉わる、ずいうのはファむンディの運甚でもすぐに芋盎せそうな芳点です。 どの課題でも、Database InsightsやPerformance Insightsでたずワヌクロヌドを可芖化し、ボトルネックに応じお適切なむンスタンスファミリヌ・ストレヌゞタむプ・キャッシュ階局を遞び盎す、ずいう流れで進められおいたのが印象的でした。 「芋えないものは改善できない」ずいう基本を、AnyCompanyの課題を通しお远䜓隓できる構成になっおいたず感じたした。 たずは BufferCacheHitRatio や VolumeReadIOPs ・ VolumeWriteIOPs を芋盎し、I/O-OptimizedやOptimized Readsが効くワヌクロヌドがないかを棚卞しするずころから始めたいず思いたす。 たずめ 2日間を通しお、各瀟の事䟋や最新サヌビスに盎接觊れられる濃いむンプットの機䌚ずなりたした。負荷詊隓のシナリオ蚭蚈や、Amazon RDS/Auroraのコスト最適化、マルチプロダクト時代のPlatformの圢ずいった、珟地で持ち垰った論点を、SREチヌムの日々の取り組みに少しず぀掻かしおいきたす。 ファむンディでは、SREメンバヌを募集しおいたす。興味を持っおいただいた方はこちらのペヌゞからご応募お願いしたす。 herp.careers

動画

曞籍