宇宙スープ

Once upon a time, the Universe expanded from an extremely dense and hot soup

なぜ肉食動物の肉を食べる習慣がないか?

現代では、肉食動物の肉を習慣的に食べる文化は世界中を見てもかなり少ない。
地域によっては犬を食べる文化が存在するが、食用の犬のエサは穀物なので、この場合肉食動物に該当しない。

肉食動物の肉は美味しくないと言われることがあるがどうもそうではないらしい。たとえば熊掌(ゆうしょう:くまのてのひら)は高級食材としても知られる。「銃・病原菌・鉄」の著者であるジャレド・ダイアモンドはライオン肉の味を保証できると記述している。

人間が肉食動物の肉を習慣的に食べないのは決定的な理由がある。
それは、食用に家畜化できないからである。
家畜化できないということは、狩猟採集方式以外に肉を手に入れる方法がないということ。
狩猟採集法では、一定以上の人口に持続して安定的に食糧を供給することができない。ゆえに人間のコントロール下に無い、供給が不安定な食材に頼る食文化は継続できない(もしくはメジャー化しない)。

 

文庫 銃・病原菌・鉄 (上) 1万3000年にわたる人類史の謎 (草思社文庫)
 

「銃・病原菌・鉄」は、大型哺乳類の家畜化は実は相当に難しかったことを明らかにする。ある動物を家畜化に成功するための条件を7つ上げていて、そのいずれかでも当てはまらないと失敗すると言う。
その条件の1つに「草食動物であること」がある。
なぜ、肉食動物は家畜化できないのか。

肉食動物を家畜化できない理由は、肉を食べるからである。
牛や豚でさえ、毎日大量の穀物を食べる。高いコストで畜産した草食動物の肉を肉食動物に与えることは莫大に高いコストがかかることになる。

以下のデータから、草食動物を畜産するコストを考える。
Nutritional Requirements of Beef Cattle: Nutrition: Beef Cattle: Merck Veterinary Manual
http://www.explorebeef.org/cmdocs/explorebeef/factsheet_modernbeefproduction.pdf

  • 牛1頭の体重:600kg
  • 牛1頭が1日に必要なエネルギー:10.73MCal
  • 牛1頭を出荷するまでにかかる日数:20month = 600days
  • 牛の餌(大麦)の実質エネルギー:2.06Mcal/kg = 0.02MCal/kg

つまり、

  • 600kgの牛1頭を畜産するのに必要なエネルギー:6.4GCal*1
  • 600kgの牛1頭を畜産するのに必要な餌(大麦*2):312524kg = 312t*3

となる。

  • 牛1頭分牛肉のエネルギー:1.5GCal*4
  • 牛1頭で1日何人分のエネルギーを賄えるか:1000人*5
  • 牛1頭の畜産に必要な大麦で1日何人分のエネルギーを賄えるか:4292人*6

つまり、直接農作物からエネルギーを摂取する社会は、牛肉のみをエネルギー源としている社会に比べて4倍以上の人口を扶養させることが理論上可能である。

肉食動物を家畜化すると考えるとどうだろうか。
ライオンを例として、離乳から成獣になるまで2.5年間、1日5kgの肉を与え続ける*7と考えると*8、ライオン1頭を畜産するのに7.6頭の牛肉が必要となる。*9
ライオン1頭の体重はオス/メス平均して170kg程度なので、ライオン肉にどのくらいの栄養があるかは不明だが、仮に牛肉相当のカロリーがあるとするとライオン肉のエネルギー効率は牛肉と比較して1/30しかない。ライオン肉の価格はグラムあたり牛肉の30倍になるという計算だ。*10

もちろん家畜化できない理由はエネルギー効率が全てではないので、このコストを克服したとしても家畜化できるものではない。人為的に繁殖を促すことは相当難しいと思われる。実際、ほとんどの動物園では貴重な動物の繁殖に失敗し続けている。
重要なのは、陸上の二次元空間において単位面積あたりに存在できる植物の量は決まってしまうということ。それによって存在できる草食動物、ひいては肉食動物の数も決まるということである。
人間の居住範囲が広がることで絶滅種や絶滅危惧種の数が跳ね上がっているのは確実にそれと関係している。肉食動物を家畜化するとなると、そのエサを支える作物を栽培するためのさらに広大な農地が必要となり、自然が切り拓かれるだろう。それは野生の大型動物をもっと危機的な状況に追いやることも意味する。

*1:10.73MCal * 600days。生後6ヶ月間ほどは体も小さいうえミルクで育つため、10.73MCal * 600daysは全く正確ではない。が、母牛はミルクのため余分にエネルギーを必要とすることもあるので、簡単のため単純計算する。桁を外さない程度の正確さにとどめる

*2:牛の餌には6種類程度の原料が含まれるが、代表して大麦のみ与えると仮定する。大麦は牧草などと比べるとかなり高カロリーなので実際はもっと量が必要になる

*3:6.4GCal / 0.02MCal

*4:100gの牛肉を250kcalとして、2.5MCal * 600kg

*5:人間の1日のエネルギーを1500kcalとして、1.5GCal / 1.5MCal

*6:6.4GCal / 1.5MCal

*7:ライオン - Wikipedia

*8:家畜化の過程でコスト効率はもっと良くなると考えられるが、簡単のため野生のライオンで考える

*9:5kg * 912days = 4562.5kg。4562kg / 600kg = 7.6

*10:ライオンのエサをよりエネルギー効率が良い鶏肉にすれば改善は見込める

ネアンデルタール人ゲノムから分かる初期人類の愉快な日常

ネアンデルタール人は長い間現生人類の祖先と考えられてたようだが(自分が中学校のころもそう習った)、そうではないことが証明された。ネアンデルタール人現生人類は共通の祖先がいるだけであくまで別の種である。

すると人類学者の間では、ネアンデルタール人現生人類の間に交配があったか、ということが大きな議論の的となった。
生物学的には、遺伝的距離が短ければ別の種同士であっても発情し子どもを生むことができるが、遺伝的距離が長くなると発情しなくなる。人為的に強制交配させ子どもを作ることは可能でもその子どもには繁殖力が無いといったDNA上の原理があるらしい。
ネアンデルタール人現生人類は互いに惹かれ合い子どもを作ったのか、というのは非常に興味深いテーマであった。

2010年に世界を震撼させたゲノム解析結果がその問題に終止符を打った。
ヨーロッパおよび中東に特有の遺伝子、いわゆるコーカソイド遺伝子の1~4%程度はネアンデルタール人から継承されていたのだ。
どういうことかと言えば、Wikipedia掲載の以下の図がわかりやすい*1

f:id:metheglin:20161008165812p:plain

今から述べることはネアンデルタール人研究結果から勝手に想像したことに過ぎないが、現世人類との関係を考える上では十分ありえることではないかと思う。

1~4%という数字がいかに大きいかイメージしてほしい。
現代で考えれば平均的な中学校の学年に1人以上、場合によってはクラスに1人ネアンデルタール人がいるということになる。
ネアンデルタール人は現生人類の祖先よりも低身長だったが、体重は重く、太く頑強な肉体と腕力を持っていた。
「クラスに1人いたチビの怪力」くらいの馴染みで現世人類の族社会にネアンデルタール人が溶け込んでいた可能性がある。

ネアンデルタール人の男が現世人類の女を誘拐し(もしくは恋に落ち?)、ネアンデルタール社会に連れてきて子孫を残したということはあったかもしれないが、それは現代のヒトの遺伝子にネアンデルタール遺伝子が残っている理由にならない。現代の遺伝子に残っているということは、現生人類の祖先が部族社会の中でネアンデルタール人との子どもを育てたということを意味する。
そのためには以下のケースが考えられる。

  1. 現生人類の女がネアンデルタール人の男と接触し妊娠し、自分の部族に戻って産んで育てた
  2. ネアンデルタール人の女が現生人類部族社会に連れてこられ、子孫を残した
  3. ネアンデルタール人の男が現生人類部族社会に連れてこられ、子孫を残した
  4. ネアンデルタール人の男女が現生人類部族社会と共生し、子孫を残した

全てのケースが部分的にあった可能性はある。けれど、1~4%も面影を残していることについて、最も大きな理由となりうるのは個人的に(3)でないかと思っている。

(1)と(2)は、狩猟採集社会で部族のしきたりの中で生きていかなければいけない当時の実状を想像すると可能性は低いと思う。狩猟採集民は安定して食糧を確保できないので、人口を多く保てない。産まれすぎた子どもを間引く(つまり人口制御のため意図的に殺す)文化も珍しくない。
異種との子どもを育てるという人種的許容が当時の社会にあったとは思えない。例外としてはあったことは否定しないが、1~4%の面影を今日にまで残すほどの規模でそういうことがあったとは思えない。
また、子育てにおいてまわりから多くの協力を得なければいけない女性はアウェイの環境に置かれることに弱いという特徴もあると思う。ネアンデルタール人の女性が人類祖先の女性からの手厚い支援を受けられたとも思えない。

(4)は男女ともに異種間の交配があり、互いにハーフの子を育てるような状況である。そのようなことがあったとするとかなり興味深いが、だとすれば逆に1~4%程度にとどまっていることが謎になる。また、そういう例があればそれを示す大規模な考古学的証拠が上がってもおかしくない。
基本的には現生人類とネアンデルタール人は敵対関係にあったと考える方が自然だと思う。

(3)は部分的に前述の説明を覆す内容になるが、ネアンデルタール遺伝子が現代に残る理由として説得力があると思う。
つまり、ネアンデルタール人の男は、現生人類祖先の部族社会に受け入れられた例が多数あったのではないかということだ。「ネアンデルタール出身チビの怪力くん」が各部族に1,2人紛れていたということである。
そう考えると、90年代後半の研究でミトコンドリアDNA解析結果からネアンデルタール人と現生人類の交配がまったくなかったと結論付けられた理由も説明できる。ミトコンドリアDNAは突然変異を除いて母系のDNAを100%継承するからである。

ネアンデルタール人の人間離れした怪力は狩猟時に大活躍したのだろうと思う。そのため彼らは部族から受け入れられ、重宝された。
彼らが現生人類部族に参加したのは、ネアンデルタール人の中でも異端の存在だったからかもしれないし、戦いに敗れて捕虜となったからかもしれない。優れたスキルを持った男性がネアンデルタールと現生人類との間でトレードされたという可能性もある。
いずれにしても、彼らはその後部族社会に溶け込み、少なくとも活躍したと考えられる。なぜならそうでないと現生人類の女性との間に子どもを設け、その子どもを部族の中で育てることなどできないからだ。
彼らはある意味部族社会の人気者でヒーローだったかもしれない。ちょうど外国人スポーツ選手が日本リーグで大活躍するようなかんじで。

f:id:metheglin:20161008192119j:plain

*1:厳密にはサブサハラ以南アフリカ先住民を除く現世人類にネアンデルタール人の遺伝子が残されている可能性が高い。Archaic human admixture with modern humans - Wikipedia, the free encyclopedia

なぜポリネシアはラグビーが強いのか?

昨年、日本がラグビーワールドカップで大活躍したのは記憶に新しいが、ラグビー強豪国と言われる国々が特徴的なことに気付く人は多いと思う。サッカーやオリンピック主要競技と比べると随分と毛色が違う国々が並ぶ。

以下Wikipediaから引用した2016/06/13時点でのラグビーワールドランキングを見ていただきたい。

ワールドラグビーランキング - Wikipedia

1 増減なし  ニュージーランド 96.10
2 増減なし  オーストラリア 87.56
3 増加 1  イングランド 86.37
4 減少 1  南アフリカ共和国 85.66
5 増減なし  アルゼンチン 82.59
6 増減なし  アイルランド 82.49
7 増減なし  ウェールズ 82.33
8 増減なし  フランス 78.36
9 増減なし  スコットランド 78.32
10 増加 1  フィジー 77.13
11 減少 1  日本 77.07
12 増減なし  ジョージア 72.70
13 増減なし  トンガ 71.43
14 増減なし  イタリア 70.78
15 増減なし  サモア 70.29
16 増減なし  ルーマニア 67.95

 

おもしろいのは、なぜかベスト16にポリネシア諸国が並ぶところだ。
ニュージーランドが1位というのも驚きではあるが、まだ理解の範囲内としよう。しかし、フィジーサモア、トンガに関しては明らかにおかしい。どう考えてもチーム制競技で世界のトップをはれる人口規模ではない。
あなたの出身の市区町村の人口を考えてみてほしいが、その地元の代表団が世界大会の競合常連になるようなものである。

人口 世界人口推計ランキング 名目GDPランキング
ニュージーランド 444万 122位 56位
フィジー*1 85万 161位 149位
サモア 18万 187位 178位
トンガ 10万 196位 183位

この謎にほぼこたえてくれた本が以下の「海を渡ったモンゴロイド」であった。ポリネシアの起源などについて言及している。

 

海を渡ったモンゴロイド (講談社選書メチエ)

海を渡ったモンゴロイド (講談社選書メチエ)

 

ポリネシア人モンゴロイド

ポリネシア人はどこからやってきて、太平洋島嶼部に住み着いたのか。
実はこの問題は、西欧が初めてポリネシアを発見した当初から西欧人の興味を惹く問題であった。なぜなら、ポリネシア人はほりが深く、身体的に大柄な筋肉質で、いわゆる白人(コーカソイド)に似た外見をしていたからだ。さらに、ポリネシア文化は独特な神話が伝承されており、階層的な社会構造を持つなど、メラネシアや東南アジアなどの周辺地域の文化とかなり異なっていた。
その当時はインドあたりから西欧人が太平洋に出て移住してきたという説もあった。

現在は、DNA解析の技術が洗練されたこともあり、ポリネシア人の祖先は本のタイトルにもあるように「モンゴロイド」であることが決定的である。
人類のポリネシアへの船出が始まった経緯は前回ブログにも書いた。

metheglin.hatenablog.com

スンダランドを中心とするオーストロネシア人が海上文化を発展させ、その文化の結集体として彼らは外洋航海へと挑戦し、太平洋の島々を次々と発見していった。ポリネシア人は彼らを祖先とする人々である。

太平洋に出れば出るほど島の密度は薄くなり、航海は困難になる。「海を渡ったモンゴロイド」は古代ポリネシア人の太平洋制覇という偉業の詳細に言及しているが、ここに大きな驚きがある。

自分ははじめ、死を恐れない、向こう見ずな人々が偶然に頼って島を発見していたのだと思っていた。しかしどうもそうではないらしい。
なんなら彼らは島を見つけてから故郷に戻るくらいの余裕を持った航海技術を持っていた可能性がある。

風も海流も逆に受けながら海を渡った

何よりの驚きは、ポリネシア一帯は恒常的に東から西に海流が流れ、風が吹いているということである。
これは偶然に任せた航海では絶対に東の島にたどり着かないことを意味する。計画的に航海しなければ太平洋の島々を発見することは不可能なのだ。

そしてポリネシアの島々で人類が住み始めた順番に興味深いところがある。
300年イースター島、400年ハワイ、1000年ニュージーランドとなっている。
ポリネシアでも最も大きいニュージーランドやハワイといった島は最後の方に発見されているのである。それよりも先に太平洋最東端のイースター島に行き着いた。

古代ポリネシア人にとっては、海流と風を逆走する東の制覇の方が簡単だったのである。その理由は、緯度が同じ方が星座の位置関係から現在位置を計算しやすいなどの理由が大きいが、帰り道が追い風、追い海流になるため、より安全だったという説もある。

航海の障壁となっていたものは寒さ?

計画的だったとは言え、相当過酷な冒険であったことに違いはないだろう。
時系列的にはだいぶ後のことになるが、鑑真が日本への航海で何度死にかけたか思い出せば、太平洋の航海は想像を絶する恐ろしさである。

特に彼らを苦しめたものは寒さだったのではないかという説がある。赤道近くの海とは言え、夜には日は沈み、1日中水しぶきを浴び続ける。西欧の冒険家がこの一帯をカヌーで航海をした際にひどい寒さに苦しんだという記録があるらしい。
ということは、限られた食糧から最大限のエネルギーを備蓄し、熱を生み出せる者しか洋上の長旅に耐えることはできない。

なぜポリネシアラグビーが強いのか?のこたえ

以上より、ポリネシア人が異常にラグビーが強い理由について以下のように推察できる。

過酷な海の長旅に耐えることができたのは、屈強な肉体を持ち、熱を蓄えやすい身体的特徴を持った男女であった。彼らが到達した島は、大陸からあまりに離れていたため、現代社会以前は多民族との交流が少なかった。その結果彼らの保有していた特徴はボトルネック効果となって、現在にも続くポリネシア人の特徴として受け継がれることとなった。

つまり、肉体的に頑丈な男性が生まれやすいということである。
実際ラグビー以外では格闘技でもポリネシアは有名選手を多数排出している。ポリネシア人は総じて肉体を酷使するスポーツに長けている。
また、現代のポリネシア諸国は肥満が社会問題化している。熱を蓄えやすいというのは栄養が豊富になれば、太りやすくなるということでもある。

 

*1:厳密にはフィジーポリネシア諸国に分類されないが、ポリネシアメラネシアの境界に位置し、ポリネシア文化の影響を濃く受けている国である

ハワイ、イースター島、ニュージーランド、マダガスカルに住みついた人々

列強植民地政策などの歴史を知っている人は、現在アメリカ合衆国の1州であるハワイにカメハメハ大王に代表される先住民がいたことをご存知だと思うが、冷静になって、なぜハワイに先住民がいたのか?を考え始めると夜も眠れなくなると思う。
同様の疑問は、モアイ像を作ったイースター島の先住民は何者なのか?を考え始めても同じである。

ハワイやイースター島は地図で見るとあり得ないほど孤立している。
なぜこのような島々に先住民がいるのか、については一度考えてみてもいい。それはホモ・サピエンスの凄さを物語っているので。

 

 

海を渡ったモンゴロイド (講談社選書メチエ)

海を渡ったモンゴロイド (講談社選書メチエ)

 

オーストロネシアという大言語グループ

オーストロネシア語族という、系統を同じくする言語を持つ民族グループがある。
近代以前までは地理的に世界最大の範囲に分布する語族であった。そのカバー範囲はすさまじい。

インドネシアが中心地となり、台湾、ハワイ・イースター島ニュージーランドなどのポリネシアミクロネシアパプアニューギニアなどのメラネシアの一部、そしてマダガスカルである。
少なくともこれらの地の先住民は同系統の言語を話す民族であった。
世界地図で見ると、以下のようにすごいことになる(Wikipedia引用)。

f:id:metheglin:20160918190021p:plain

海を渡るようになったホモ・サピエンス

ヒト属の移動は陸続きの土地については幾度もの波があったと考えられる。
たとえば、かつて東南アジアにはジャワ原人が住んでいたことが分かっているが、ジャワ原人ホモ・サピエンスの直系祖先ではないことがほぼ定説となっている。類人猿と現生人類の分かれ目となるアウストラロピテクスはアフリカ単一発祥であることは共通見解なので、これはつまり、東南アジアにはじめに住み着いたジャワ原人と、その後東南アジアに到達し現地のジャワ原人に置き換わったホモ・サピエンス*1、少なくともこの2つ以上の大きな移動の波があったということだ。

しかし、南北アメリカ大陸、オーストラリア大陸オセアニアの島々、日本などにはホモ・エレクトスホモ・サピエンスの直系祖先)の化石は見つかっていない。つまりこれらの地域には、ホモ・サピエンスが誕生するまではヒト属が住んでいなかったのである。
おそらくその最大の理由は、海を渡る必要があったからである。*2

ここで1つの疑問を解決しておく必要がある。ジャワ原人の化石が見つかっているインドネシアはどう見てもユーラシア大陸から離れた島なのだ。ホモ・サピエンス以前は海を渡れなかったはずなのに、なぜここで化石が出土するのか?

古代存在した大平野スンダランド

大昔、氷河期時代には海氷の割合が増えるため海面が低下する。当時の地球は現在と比べ100m近くも海面が低かったという。海面が下がると、マレー半島インドネシアのボルネオジャカルタが位置するジャワ島などの島々は陸続きとなる。
この古代存在した広大な平野をスンダランドとよぶ。

スンダランド - Wikipedia

つまり、ジャワ原人は氷河期時代の陸続きをつたってインドネシアまで到達したのだ。ホモ・サピエンスモンゴロイド)の到達も同様である。

海上文化を洗練させたオーストロネシア文化

諸説あるが、おそらくオーストロネシア文化発祥の地もここスンダランドである。*3当時のオーストロネシア文化には世界で最も先進的で特徴的な技術があった。それは航海術である。

現在でも東南アジアには漂海民とよばれる人々が存在するらしい。海の上で生涯の大半を過ごすという信じられない民族である。 

retrip.jp

おそらく古代オーストロネシアにも彼らのように舟の上を主戦場として、航海術を洗練させた人々がいた。そして彼らは、各地域の特産物を持って海を往復し、交易をおこなっていた。当時としては超重要な民族だっただろう。
「海を渡ったモンゴロイド」の著者後藤氏はオーストロネシア語とは、交易言語であったというおもしろい説を提唱している。

スンダランドは全体的になだらかな平野で、海岸線は入りくんでおり、島々も多かった。その土地が氷河期終焉とともにゆっくりと海に侵食されていくのである。海上文化を発展させる環境が整っていたのに加え、外洋へのりだし新たな島を開拓する強い動機を彼らは持っていたのだ。

太平洋上未踏の島を制覇した開拓者たち

人類未踏の地、ハワイ、イースター島ニュージーランドに出て行った人々は、まさにその自然史的にも重要な時代に生きていた。
まずフィジー、トンガ、サモアなどに渡った民族がポリネシア文化を発祥した。
そして彼らはさらに外洋の航海へと旅立つ。紀元300年には太平洋の東を制覇。イースター島に到達する。
紀元400年にはハワイを発見。そして紀元1000年にはついにニュージーランドに到達し、この時点で人類は地球上の生活可能な主要な島にほぼ住み着いてしまったのである。

最も驚くべきはマダガスカルである。
マダガスカル人の祖先は、言語的類似性、DNA解析結果の両方がスンダランド起源を支持していて、ほぼ定説となっている。*4
「銃・病原菌・鉄」によると、アフリカ大陸東海岸には、オーストロネシア人と交流があった痕跡が今のところ無いという。
これはつまり、マダガスカルへ到達したオーストロネシア人がアフリカ大陸を経由したわけではないことを示している。インド洋を縦断してほぼ直線的にスンダランドからマダガスカルに到達した可能性がある。だとするとミラクルだが、マダガスカル人の移動についてはまだ謎の部分が大きい。

「海を渡ったモンゴロイド」は太平洋制覇を可能とした2000年近くも前の航海の詳細に触れているが、なかなか想像を上回る内容なので、興味ある人にはおすすめできる。


*1:アフリカ単一起源説。

*2:ただし南北アメリカ大陸は氷河期にユーラシア大陸と陸続きになることがあるので、海を渡る必要がなかった可能性はある。

*3:土器の類似性とDNA解析の結果から「銃・病原菌・鉄」では、台湾起源説を唱えられており、これが一般的な見解でもあるらしい。けれども「海を渡ったモンゴロイド」の著者後藤氏はスンダランド中心説を唱えていてこれが興味深い。この説はDNA解析結果とも矛盾せず、当時の文明の実態をより深く洞察していると個人的には思った。

*4:スンダランド起源のオーストロネシア人と黒人の混血。

システムがおもしろいという話

大学生のころ自宅にインターネット開通したときが楽しくて、しばらくWikipediaをネットサーフィンしてた時期があった。
特に印象深く覚えているのは「バタフライ効果」を筆頭とする複雑系の説明だった。

バタフライ効果とは、「ブラジルの1匹の蝶の羽ばたきがテキサスで竜巻を引き起こす」といった、ごく微小な大気の撹乱が巡り巡って増幅し、大きな変化となって予想もしない場所に現れる現象を言う。大気などの複雑極まるシステムでは、ミクロに見るとごく単純な法則で動いているのに膨大な要素が絡みあうため、はじめの状態から時間が経過すると予測もつかない大事件が起こりうる。この事実は、この世界が決定論的に動いていたとしても、観測誤差がわずかでも生じる限り長期予測が不可能なことを示唆している。この説明に当時なにかグッと来るものがあり、以来お気に入りになった。

奇妙なシステム障害との遭遇

ただのお気に入り話だったバタフライ効果を再び思い出したのは、社会人になって1年ほど経ったときだった。ソフトウェアエンジニアとして就職して、アクセス量の多いウェブサイトの運用を担当してた。右も左もわけがわからず、謎の専門用語が飛び交う前線でひたすらシステムトラブル対応をやっていた。

ある日、ロードバランサとよばれる機器の異常を知らせるアラートが上がった。
ロードバランサは自分の所属部署管理ではなく、ネットワーク部の管轄だったので、その担当者をつかまえて対応してもらおうと考えた。しかししばらくするとそのネットワーク部担当の方から「あなたの部署管理のウェブサイトがロード許容量をオーバーしています」みたいな連絡が来た。
流れに身を任せて調査を進めていると、なんとトラブルの原因はそのサービスのデータベースにあったことがわかったのだ。

Webエンジニアでなければわけがわからないと思うので、一般的なウェブサイトのシステム構成を説明する。

f:id:metheglin:20160902205127p:plain

データベース(以下DB)は、データを保存する担当である。たとえばあなたが会員登録をすると、その情報をなくさないようにどこかのハードディスクに保存しておく必要がある。アプリケーションサーバがDBに「これ保存しといて」「この情報教えて」などと指示を出す。

ウェブアプリケーションサーバ(以下APPサーバ)は、サービスそのものである。たとえばユーザが会員登録ボタンを押したら、画面Aを表示させて、個人情報入力したらDBに保存の命令を出して...などなどアプリケーションを構成する機能がすべてプログラミングされたものが動いている。必然的にこの機器は忙しくなりがち。パソコンでいろいろやってると動作が重くなることがあるが、それと同じ状況に陥りやすい。

ロードバランサ(load balancer)(以下LB)とはload(積み荷、荷重)をbalance(分散)させるための機器である。荷物の中央集積所のような場所で、次から次とやってくる積み荷をどこに受け渡すかを指揮するのがLBの役割である。ゲームなどでお馴染みのNow loading...のloadも同様に必要な荷物をトラックなどに積み込む作業をイメージした言葉と思われる。
前述のようにAPPサーバは忙しくなりやすい。それゆえ、サーバが重くなったときは、機器自体の台数を増やすという戦略をとる。そのとき、ユーザから次々とやってくるアクセス(積み荷)をどうバランスよく複数のAPPサーバに振り分けるかということが問題になる。LBはその問題を解決する機器となる。

つまり、ユーザがウェブサイトのページを見ようとすると、そのアクセスはLBが受信し、APPサーバへと渡され、さらにDBへと命令が渡る。アクセスの流れ、それぞれの機器の役割をざっと把握したところで、はじめの問題を再考したい。

当時自分はLBがアラートを出したのでそこに問題があると思った。しかし実際の問題はシステム奥底のDBにあった。前述の説明をふまえればこのときの自分の戸惑いを少しは分かってくれたかもしれない。

「なぜ、システム奥底のデータベースに起こった問題がシステムの最前線であるロードバランサの障害となって出現するのか?」

このときはじめてシステム障害がバタフライ効果に似ていると思ったのだった。複雑に構成されたシステムはとある原因が思いもよらぬ別の場所で障害となって現れる。

どういうメカニズムでこんな奇妙なことが起こるのか、そろそろ理解しないとやばいと思った自分は情報をかき集めて真相を理解しようと頭を整理した。

どんなシステムも単位時間にこなせる仕事量、キャパシティ(許容量)を持っている

先ほどloadを積み荷と表現したが*1、この荷物の中にはなにが入っているのか?ユーザがサイトにアクセスすると、それが荷物となってシステム内を流れる。つまり荷物の中には「ユーザがなにをしたいか、何の情報を見たいか」という情報が入っている。
つまり、loadには「大きさ」があるということである。KB(キロバイト)、MB、GBなどおなじみの単位で表せるようなサイズを持っているということ。サイズがあるということは無限にloadを溜め込むことはできないということだ。その限界は、その機器が搭載するメモリのサイズに依存する。

そしてloadを受け取った機器はその荷物の中身を見て、おのおのがやるべきことを処理する。
「処理する」ということは計算をおこなったり、データ書き換えなどを実際におこなうことである。こういった作業は通常人間が観測できないほど超高速でおこなわれることがほとんどだが、0秒ではない。ほんのわずかでも処理時間が必要になる。

要するにシステムにはそのキャパシティ(仕事の許容量)を決定づける時間(処理時間)と空間(メモリサイズ)が存在するのである。

システムの許容量を超えた仕事を与え続けるとどうなるか?

キャパシティを持つシステムに対して、loadはユーザのページビュー数だけやってくる。
たとえば、1回の会員登録を完了するのに0.1秒を要し、同時に10アクセスを許容できるシステムがあったとすると、秒間100回の会員登録が許容の限界ということになる。秒間100以上の会員登録が来た場合、その積み荷の出し手に待ってもらわないといけない。これをloadが「滞留する」と表現したりする。
「滞留」は、現実世界にたとえるとレジ待ちの行列ができるようなものである。前述のようにloadにもサイズがあるので、現実の行列がスペースを占有するのと同じように、loadが滞留するとメモリを占有してしまう。
秒間100以上の会員登録がずっと来続けると、空きメモリはどんどん少なくなり、限界に達する。最終的にはloadを拒否するしかない。ウェブサイト上では、アクセスを拒否されたユーザは「503 Service Temporarily Unavailable」などの表示を見ることになる。

DBトラブルがLBの問題を引き起こす仕組み

まとめると、

  • DBに異常が起きて動作が遅くなるとどうなる?
  • => DB上にloadが滞留する
  • DB上にloadが滞留するとどうなる?
  • => APPサーバ上にloadが滞留する(APPがDBに命令を出してその応答を待っている。DBの仕事が終わるまではAPPサーバの仕事もやめられないので、滞留させておかないといけない)
  • APPサーバ上のloadが滞留するとどうなる?
  • => LB上のloadが滞留する
  • LB上のloadが滞留するとどうなる?
  • => 限界までloadを滞留させておくことはできるが、それを超えると新規のユーザアクセスを拒否する。同時にその異常事態を知らせるアラートがLBからとんだ。

これが事の真相であった。

極限の綱引きでバランスされる大規模システム

問題の根本的原因はDBにあったことがわかったが、停止したわけではなかった。停止していたらさすがにDBの異常を知らせるアラートが上がっていたはずだ。
実際にDBで起こっていたことは、「CPU使用率」の高騰である。

パソコンを使ってるとファンがシューシューとうめき、熱くなることがあるのはご存知と思うが、あれはCPUがフル稼働するときに起こる。このとき電力の消費量が大きくなり、大きな熱を発する。CPU使用率は、そのコンピュータの忙しさを表していると言える。CPU使用率が100%だと、新しい仕事がやってきてもなかなか対応する余裕がないといった具合だ。

ここでおもしろいのは、たとえば前述の例で1回の会員登録に0.1秒かかると思っていたものは正常時の数値なのである。CPUがせわしなくなってくると0.1秒で処理が完了しなくなる。処理時間が遅くなる。
処理時間が遅くなるとloadが滞留するので、CPUは休む暇なく次の荷物を処理する必要に駆られ、さらに忙しくなる。

これは大規模なウェブサイトでよく起こる、最も典型的なシステム悪循環の例である。
仕事をがんばらないといけないときに限って、CPU使用率が高騰し処理時間が遅くなるので、システムのキャパシティは見る見る減っていくのだ。

高校数学で極限という分野があって、「0 × ∞ = 0ではない。不定である。」と習う。0と∞の綱引きでより強い方が勝つのだ。
大規模システムのバランスもこれとよく似ている。
処理時間は通常限りなく0に近く、一方loadの数は膨大である。処理時間が0に近ければどんな大量のloadが来ても瞬時に処理されるので問題はない。しかしCPU高騰などで処理時間がわずかに悪化すると、0が弱くなり、途端に∞が勝つということが起こる。大規模システムの保守とは、極限のせめぎ合いだったのだ。

これに気付いたときの感激は未だに忘れられない。もう、トラブル対応が楽しくてしようがないというかんじ。それ以来、自然界、人体、社会など、システム的な動きを見せる現象にすごく興味を持つようになった。

 「世界はシステムで動く」を読んで、それを再認識できた。

世界はシステムで動く ― いま起きていることの本質をつかむ考え方

世界はシステムで動く ― いま起きていることの本質をつかむ考え方

 

 

*1:loadは、仕事上では「負荷」と訳されるのが一般的。また、loadが滞留するような場合には、loadではなくセッション、コネクションなどと表現することが多い。荷物が流れたり、滞留するという説明のほうが非Webエンジニアには分かりやすいと考えてこの表現にしている。

「いちいち確認するな」と「勝手に判断するな」の境界

仕事の話します

qiita.com

上司がいる環境で仕事をやり始めると誰でも「そんなこといちいち確認するな」と怒られ、一方で「自分で勝手に判断するな」と怒られた経験があると思う。どっちやねんと。特に新卒新人がこの境界で苦しむことは多いと思う。

自分の新卒のころを思い出すと、たしかに判断を仰ぐべきか迷ったことはあったけど、あまり思い悩んだことはなかった気がする。正しかったかそうでなかったかは別にしてもわりと自信をもって行動してた。
冒頭のリンクの記事を見て、どうやって自信を持てていたのか改めて考えをまとめることができたので自己流の場合分けを紹介したい。

自分で判断すると勝手に判断しない境界の場合分け案

それをやることでおこりうる問題をある程度予測できる かつ
問題がおきたとき自分の力だけで尻拭いができる

なにも聞かずに実行

それをやることでおこりうる問題をある程度予測できる かつ
問題がおきたとき自分一人では処理”できない” かつ
前に許可をもらったことがある

「やりますね」

それをやることでおこりうる問題をある程度予測できる かつ
問題がおきたとき自分一人では処理”できない” かつ
前に許可を”もらったことがない”

「こうすべき(こうしたい)と思いますが、どう思いますか?」
「いちいち聞くな」と言われたら、「すみません、○○みたいな問題がおこるかと思って一応確認しました」

それをやることでおこりうる問題を”予測できない”

怒られること覚悟で教えを乞う。
「いちいち聞くな」と言われたら、「すみません、どういう問題がおこるかイメージできなくて確認しました」

 

要点

上司に確認を求めるときは、何かしら怒られに行くと思う

新卒が考えることとその部門の責任者がが考えることには大きな乖離がある。自分の連絡に上司がどう反応するかは全くわからないと思ったほうがいい。まさか怒られると思いもせずに突進すると、不意をつかれてパニックになったり不要にストレスを感じることになるので、ベースとしては怒られること前提のメンタルを持っておくべき。

怒られたら、こっちもいろいろ考えて行動しているアピールをして上司を牽制する

「いちいち確認するな。そんなことも自分で判断できないの?」
と言われたら、「すみません、○○みたいな問題が起こりうると思ったので一応確認しました」と一言だけ釘を指す。ポイントは一言だけ。自己弁護が過剰すぎてもだめ。間違っても反抗的な態度にならないように。

これを言えるか言えないかには大きな差があると思う。何より仕事のことを真剣に考えていることが上司に伝わるはず。なぜ確認したのか、をある程度説明できる人に対して上司は迂闊に叱咤したり無下な態度をとりにくくなる。

はじめは怒られること前提で考えなければいけないが、怒られ慣れてもあまりよくない。怒られた後にプチ牽制入れられるようになると怒られるばかりの新卒から脱する手がかりとなる。

問題を予測する能力を鍛える

それでも結局は、どういう問題がおこりうるのかがさっぱり分からなければどうしようもない。問題予測能力を鍛えるためには、過去に起こった問題や、同僚が犯したミス、同じ部署内で発生しているトラブルに感覚を研ぎ澄ませる必要がある。自分の任された仕事だけを考えていてはだめということ。電話、メール、チャットなどで先輩たちが対応、議論している内容を理解しようと門戸を開くことが重要だと思う。

 

 

失敗は予測できる (光文社新書)

失敗は予測できる (光文社新書)

 

 

ドラッカーさんに教わったIT技術者が変わる50の習慣

ドラッカーさんに教わったIT技術者が変わる50の習慣

 

 

文明社会と隔絶された未開民族イゾラドとの接触が危険な理由

www.nhk.or.jp

10年に1度レベルの超傑作ドキュメンタリーではないかと思っているNHKスペシャルの大アマゾン特集。最終回の第4回はイゾラドとよばれる文明社会から隔絶されたアマゾン先住民族の特集だった。衝撃的だった。(たぶんまだ再放送あります)

文明との接触で全滅してしまうイゾラド

しかし、文明社会と接してこなかった彼らは、文明側の人間と会話をすること、握手をすることも毒になり得る。免疫がなく、外界との交流によってイゾラドの一族を死に至らせてしまうこともあるのだ。

 冒頭のリンクでも番組内でも触れられていたが、イゾラドと文明社会が接触すると、”非”文明側が病気で全滅してしまう危険がある。そのためイゾラドに接触する文明人はNHK取材チームも含めて、厳重な健康検査やワクチン注射をを受けなければいけないらしい。

なぜそういうことがおこるのか?

病原菌が世界の覇者を決めた説

 

 

文庫 銃・病原菌・鉄 (上) 1万3000年にわたる人類史の謎 (草思社文庫)
 

 

  「銃・病原菌・鉄」はタイトルこそつまらなそうだけど、2016年に読む本ではダントツで1番おもしろい本となる予定。朝日新聞ゼロ年代の名著第1位にも選ばれているらしいが、これは本当にその価値がある。凄すぎる。。たぶんこの本を引用して今後10本くらいは記事書くことになりそう。

 

 

人類史を振り返ると、大航海時代以降、ヨーロッパがアメリカ大陸、オーストラリア大陸を征服してしまったが、
「なぜ征服者がヨーロッパ人であり、その逆のアメリカ先住民、オーストラリア先住民ではなかったのか。」

「銃・病原菌・鉄」では、その必然性を詳らかにする。
「なぜヨーロッパが征服者となりえたのか」について表面的なこたえを用意すると、それこそがタイトルにあるように銃であり、病原菌であり、鉄をいち早く発明・発見できたことが理由であるのだが、この中でおそらく一般の人がわからないのは、なぜ”病原菌”が他大陸の征服に貢献できるのかということだ。もちろん昔の人が病原菌を生物兵器として使ったとかいう話ではない。

家畜と人口の密度が最強の病原菌を製造する

新大陸を開拓しようとアメリカにのりこんだヨーロッパ人は殺傷力の高い病原菌とその免疫を持っていたが、先住民にはそれがなかった。結果的に、ヨーロッパ人から見ると何もせずとも敵である先住民がバタバタと倒れていくことになり、インディアンやアボリジニは悲惨な運命をたどることとなった。

なぜその逆、つまり先住民が病原菌と免疫を持ち、ヨーロッパ人を殺してしまう方向に感染がおこらないのかと言えば、ヨーロッパでは大規模な畜産がおこなわれていたが、アメリカ先住民の文明にはそれがなかったからである。

ウイルス、細菌などの病原菌は基本的に動物から生まれ、変異を繰り返して動物種間を移動し、ヒトへの殺傷力の高い天然痘、インフルエンザ、はしか、おたふく、マラリア、エボラなどとなって現れる。
これらの菌は「接触」、「飛沫」、最強の部類でも「空気」を媒介しなければ感染できないので、動物同士、ヒト同士があまり密集しない状況下では感染力を高めることができない。そのため、動物およびヒトの密度の高さが病原菌の感染力の強さを決定する要因となる。つまり大規模畜産をおこない、人口集約された文明社会が強い病原菌製造の条件となる。

病原菌に決定づけられる未開民族の不幸な運命

もちろんヨーロッパ人が無傷でこの病原菌に対する免疫を手に入れたわけではなく、これらの病気を克服する過程で相当の被害者を出しているのだが、その地獄が発動されるタイミングが征服者が押し寄せてきたときだったということが、アメリカやオーストラリア先住民からすると不幸以外のなにものでもなかったかと思う。

実際アメリカ大陸の例で言えば、当時のアステカ、インカ、マヤ文明は十分高度な文明であった。ヨーロッパの水準ほどではなかったにしても、少なくとも大西洋を何日もかけて渡ってきた少数の開拓者に陥落させられるほど脆弱な民族ではなかったはずである。その運命を決定づけたのは大部分が病原菌免疫の有無であったと言えると思う。

当時のヨーロッパには、病原菌に関する今ほどの見識はなかったはずなので、自分たちは安全で先住民たちが死んでいく状況に対する説明を、おそらく宗教や民族の優位性に求めただろうと思う。それが残虐な所業を正当化することにもつながった可能性を考えると、自然の摂理の冷酷さというかなにか悔しさを感じる。