『【6章ハック】一方向にしか書けないDNA。仕様のバグを泥臭いアルゴリズムで解決した分散書き込みシステム』

バイオ・がん研究

みなさん、こんにちは。64歳のプログラマーです。

無事に第5章をパスし、いよいよ『エッセンシャル細胞生物学』の第6章「DNAの複製」に突入しました。

細胞が分裂する前には、30億文字のデータを無停止でバックアップする、いわば「ホット・レプリケーション」が行われます。この処理を担うのが「DNAポリメラーゼ」という超高性能な書き込みエンジンなのですが、生命のシステム設計には、開発者なら誰もが頭を抱える「致命的な仕様のバグ(制約)」が存在していました。

今回は、その制約を生命がどうやって「泥臭いアルゴリズム」で解決したのかをデバッグ(考察)します。


■ 仕様書に書かれた制約:「5’から3’へしか進めない」

DNAは2本の鎖が互いに逆向き(反並行)に走るダブルスレッド構造です。
しかし、書き込みエンジンであるDNAポリメラーゼには、「5’末端から3’末端の方向へしか、新しい文字を足せない」という絶対的な仕様の制約があります。

例えるなら、2車線の道路(上り・下り)があるのに、舗装重機が「私は北に向かって進みながらしか舗装できません!」と言い出したようなものです。

北に向かう「上り車線」はそのまま舗装できますが、南に向かう「下り車線」はどうやって舗装すればいいのでしょうか? 完全に設計段階の仕様バグにしか見えないこの難題を、細胞は2つの異なるアプローチで解決しています。

1. リーディング鎖 = 快適なストリーミング書き込み

重機が進む向きと同じ方向の鎖(リーディング鎖)は、何の問題もありません。
エンドレスにデータを流し込む「ストリーミング書き込み」や、シーケンシャルアクセスそのものです。酵素がハイスピードで滑らかにコードを生成していく、開発が最も順調なフェーズです。

2. ラギング鎖 = 泥臭い「細切れバッチ処理」

問題は、重機の進行方向とは逆向きの鎖(ラギング鎖)です。
ここで生命が繰り出したのが、「少し進んでは後ろに振り返り、短い断片(岡崎フラグメント)を逆向きに作って戻る」という、極めて泥臭い力技のバッチ処理でした。

一度に処理できないから、データを100〜200文字程度の細切れにしてメモリにスタックし、あとから繋ぎ合わせる。「仕様がクソなら、アルゴリズム(運用)でカバーしてやる!」という、現場の執念が詰まったパッチ当てコードのようです。


■ 後処理:ガベージコレクションと「リンカー」

細切れに作ったデータ(岡崎フラグメント)は、そのままではバラバラのままです。
最後にこれを1本の正常なコードにするため、細胞は丁寧な後処理を行います。

まず、書き込みのきっかけ作りのために仮置きしていた「RNAプライマー」というテンポラリデータをきれいに消去します。これはプログラムで言う「ガベージコレクション(メモリ解放)」です。

そして空いた隙間を埋めたあと、最後に「DNAリガーゼ」という酵素が、バラバラの断片をガチッと1つに結合します。これは、コンパイルの最終工程である「リンカー(Linker)」そのものの動きです。


■ まとめ:生命のシステムは「叩き上げ」だった

『エッセンシャル細胞生物学』の第6章を読み進めて感動したのは、生命のシステムが決して最初からスマートに設計されたわけではない、ということです。
むしろ、ハードウェア(酵素)の限界や仕様のバグを、現場のエンジニアが泥臭いアルゴリズムを組み合わせてなんとか動かしているような、「叩き上げのシステム」の匂いがします。だからこそ、40年間現場で泥臭いコードを書いてきた私には、愛おしくてたまらないのです。

次回は、この超高速書き込み(マルチスレッド処理)の中で発生するタイポを、リアルタイムで検知して修正する、生命の「インライン・デバッガ(校正機能)」について解説します。

それでは、また次回のビルドでお会いしましょう!

タイトルとURLをコピーしました