はてなキーワード: ロードバランサーとは
--
この本は5章まであるが、4章と5章はハンズオンであるため、文字としてまとめるのは1から3章に留める。
1章
【コンテナとは】
他のプロセスとは隔離された状態でOS上にソフトウェアを実行する技術
コンテナにはアプリの稼働に必要となるランタイムやライブラリを1つのパッケージとして全て含めることができる。そうすることでアプリの依存関係をすべてコンテナ内で完結できる。
全ての依存関係がコンテナ内で完結するため、オンプレでもクラウドでも起動する。
ステージング環境でテスト済みのコンテナイメージをプロダクション環境向けに再利用することで、ライブラリ差異による環境ごとのテストに必要な工数を削減できる。
サーバー仮想化では、仮想マシンレベルでリソースを分離し、ゲストOS上でアプリが起動する。つまり、アプリだけでなく、ゲストOSを動かすためのコンピューティングリソースが必要。
一方コンテナは、プロセスレベルで分離されてアプリが稼働する。OSから見ると単に1つのプロセスが稼働している扱いになる。
【Dockerとは】
アプリをコンテナイメージとしてビルドしたり、イメージの取得や保存、コンテナの起動をシンプルに行える。
イメージ(アプリケーションと依存関係がパッケージングされる。アプリ、ライブラリ、OS)
レジストリに保存
【Dockerfileとは】
このファイルにコマンドを記述することで、アプリに必要なライブラリをインストールしたり、コンテナ上に環境変数を指定したりする。
1章まとめ、感想
コンテナの登場により、本番・開発環境ごとに1からサーバーを立ててコマンドや設定ファイルを正確に行い、環境差異によるエラーをつぶしていき...というこれまでの数々の労力を減らすことができるようになった。
2章
ECSとEKSがある。
オーケストレーションサービスであり、コンテナの実行環境ではない。
ECSの月間稼働率は99.99%であることがSLA として保証。
デプロイするコンテナイメージ、タスクとコンテナに割り当てるリソースやIAMロール、Cloud Watch Logsの出力先などを指定する。
指定した数だけタスクを維持するスケジューラーで、オーケストレータのコア機能にあたる要素。サービス作成時は起動するタスクの数や関連づけるロードバランサーやタスクを実行するネットワークを指定。
2種類ありECSとFargateがある。 Fargateに絞って書く
Fargateとは
コンテナ向けであるためEC2のように単体では使用できず、ECSかEKSで利用する
サーバーのスケーリング、パッチ適用、保護、管理にまつわる運用上のオーバーヘッドが発生しない。これにより、アプリ開発に専念できるようになる
・コンテナごとにENIがアタッチされるため、コンテナごとにIPが振られるため起動に若干時間がかかる
ECR
・App Runner
利用者がコードをアップロードするだけでコードを実行できるサービス。AWS側で基盤となるコンピューティングリソースを構築してくれるフルマネージドサービス。
App Runner
2021年5月にGA(一般公開)となったサービス。プロダクションレベルでスケール可能なwebアプリを素早く展開するためのマネージドサービス。Githubと連携してソースコードをApp Runnerでビルドとデプロイができるだけでなく、ECRのビルド済みコンテナイメージも即座にデプロイできる。
ECSとFargateの場合、ネットワークやロードバランシング、CI/CDの設定などインフラレイヤに関わる必要があり、ある程度のインフラ知識は必要になる。App Runnerはそれらインフラ周りをすべてひっくるめてブラックボックス化し、マネージドにしていることが特徴である。
ECS Fargateを利用した場合のコスト、拡張性、信頼性、エンジニアリング観点
【コスト】
EC2より料金は割高。ただし、年々料金は下がってきている。
【拡張性】
デプロイの速度 遅め
理由1 コンテナごとにENIが割り当てられるため。ENIの生成に時間がかかる
理由2. イメージキャッシュができないため。コンテナ起動時にコンテナイメージを取得する必要がある。
タスクに割り当てられるエフェメラルストレージは200GB。容量は拡張不可。ただし永続ストレージの容量が必要な場合はEFSボリュームを使う手もある。
割り当て可能リソースは4vCPUと30GB。機械学習に用いるノードのような大容量メモリを要求するホストとしては不向き
【信頼性】
Fargateへのsshログインは不可。Fargate上で起動するコンテナにsshdを立ててsshログインする方法もあるが、セキュアなコンテナ環境にsshの口を開けるのはリスキーである。他にSSMのセッションマネージャーを用いてログインする方法もあるが、データプレーンがEC2の時に比べると手間がかかる。
しかし、2021年3月にAmazon ECS Execが発表され、コンテナに対して対話型のシェルや1つのコマンドが実行可能となった。
Fargateの登場からしばらく経過し、有識者や経験者は増え、確保しやすい。
多数のユーザーに使ってもらう
CI/CDパイプラインを形成し、アプリリリースに対するアジリティを高める
各レイヤで適切なセキュリティ対策(不正アクセス対策、認証データの適切な管理、ログ保存、踏み台経由の内部アクセス)を施したい
2章まとめ、感想
AWSが提供するコンテナサービスにはいくつかあり、なかでもFargateというフルマネージドなデータプレーンがよく使われている。ホスト管理が不要でインフラ関連の工数を削減できる一方、EC2より料金が高く、起動に若干時間がかかるのが難点である。
3章
この章では運用設計、ロギング設計、セキュリティ設計、信頼性設計、パフォーマンス設計、コスト最適化設計について述べている。
Fargate利用時のシステム状態を把握するためのモニタリングやオブザーバビリティに関する設計、不具合修正やデプロイリスク軽減のためのCI/CD設計が必要である。
モニタリングとは
システム内で定めた状態を確認し続けることであり、その目的はシステムの可用性を維持するために問題発生に気づくこと
オブザーバビリティとは
オブザーバビリティの獲得によって、原因特定や対策の検討が迅速に行えるようになる
・cloud watch logs
・Firelens
AWS以外のサービスやAWS外のSaaSと連携することも可能
Firehoseを経由してS3やRed shift やOpenSearch Serviceにログを転送できる
fluent bitを利用する場合、AWSが公式に提供しているコンテナイメージを使用できる
- ソフトウェアやライブラリの脆弱性は日々更新されており、作ってから時間が経ったイメージは脆弱性を含んでいる危険がある。
- 方法
脆弱性の有無はECRによる脆弱性スキャン、OSSのtrivyによる脆弱性スキャン
継続的かつ自動的にコンテナイメージをスキャンする必要があるため、CI/CDに組み込む必要がある。しかし頻繁にリリースが行われないアプリの場合、CICDパイプラインが実行されず、同時にスキャンもなされないということになるため、定期的に行うスキャンも必要になる。
cloud watch Eventsから定期的にLambdaを実行してECRスキャンを行わせる(スキャン自体は1日1回のみ可能)
Fargateの場合、サービス内部のスケジューラが自動でマルチAZ構成を取るため、こちらで何かする必要はない。
・障害時切り離しと復旧
ECSはcloud watchと組み合わせることでタスク障害やアプリのエラーを検知できるうえに、用意されてるメトリクスをcloud watchアラームと結びつけて通知を自動化できる
ALBと結びつけることで、障害が発生したタスクを自動で切り離す
AWS内部のハードウェア障害や、セキュリティ脆弱性があるプラットフォームだと判断された場合、ECSは新しいタスクに置き換えようとするその状態のこと。
Fargateの場合、アプリはSIGTERM発行に対して適切に対処できる設定にしておかなくてはならない。そうしておかないとSIGKILLで強制終了されてしまう。データ不整合などが生じて危険。
ALBのリスナールールを変更し、コンテンツよりもSorryページの優先度を上げることで対処可能
自動でクォータは引き上がらない
cloud watch メトリクスなどで監視する必要がある。
パフォーマンス設計で求められることは、ビジネスで求められるシステムの需要を満たしつつも、技術領域の進歩や環境の変化に対応可能なアーキテクチャを目指すこと
利用者数やワークロードの特性を見極めつつ、性能目標から必要なリソース量を仮決めする
FargateはAutoscalingの利用が可能で、ステップスケーリングポリシーとターゲット追跡スケーリングポリシーがある。どちらのポリシー戦略をとるかを事前に決める
既存のワークロードを模倣したベンチマークや負荷テストを実施してパフォーマンス要件を満たすかどうかを確認する
・スケールアウト
サーバーの台数を増やすことでシステム全体のコンピューティングリソースを増やそうとする概念。可用性と耐障害性が上がる。既存のタスクを停止する必要は原則ない。
スケールアウト時の注意
・Fargate上のECSタスク数の上限はデフォルトでリージョンあたり1000までであること。
ECSタスクごとにENIが割り当てられ、タスク数が増えるごとにサブネット内の割当可能なIPアドレスが消費されていく
Application Autoscaling
Cloud Watchアラームで定めたメトリクスの閾値に従ってスケールアウトやスケールインを行う
CPU使用率が60~80%ならECSタスク数を10%増加し、80%以上なら30%増加する、という任意のステップに従ってタスク数を増減させる
--
この本は5章まであるが、4章と5章はハンズオンであるため、文字としてまとめるのは1から3章に留める。
1章
【コンテナとは】
他のプロセスとは隔離された状態でOS上にソフトウェアを実行する技術
コンテナにはアプリの稼働に必要となるランタイムやライブラリを1つのパッケージとして全て含めることができる。そうすることでアプリの依存関係をすべてコンテナ内で完結できる。
全ての依存関係がコンテナ内で完結するため、オンプレでもクラウドでも起動する。
ステージング環境でテスト済みのコンテナイメージをプロダクション環境向けに再利用することで、ライブラリ差異による環境ごとのテストに必要な工数を削減できる。
サーバー仮想化では、仮想マシンレベルでリソースを分離し、ゲストOS上でアプリが起動する。つまり、アプリだけでなく、ゲストOSを動かすためのコンピューティングリソースが必要。
一方コンテナは、プロセスレベルで分離されてアプリが稼働する。OSから見ると単に1つのプロセスが稼働している扱いになる。
【Dockerとは】
アプリをコンテナイメージとしてビルドしたり、イメージの取得や保存、コンテナの起動をシンプルに行える。
イメージ(アプリケーションと依存関係がパッケージングされる。アプリ、ライブラリ、OS)
レジストリに保存
【Dockerfileとは】
このファイルにコマンドを記述することで、アプリに必要なライブラリをインストールしたり、コンテナ上に環境変数を指定したりする。
1章まとめ、感想
コンテナの登場により、本番・開発環境ごとに1からサーバーを立ててコマンドや設定ファイルを正確に行い、環境差異によるエラーをつぶしていき...というこれまでの数々の労力を減らすことができるようになった。
2章
ECSとEKSがある。
オーケストレーションサービスであり、コンテナの実行環境ではない。
ECSの月間稼働率は99.99%であることがSLA として保証。
デプロイするコンテナイメージ、タスクとコンテナに割り当てるリソースやIAMロール、Cloud Watch Logsの出力先などを指定する。
指定した数だけタスクを維持するスケジューラーで、オーケストレータのコア機能にあたる要素。サービス作成時は起動するタスクの数や関連づけるロードバランサーやタスクを実行するネットワークを指定。
2種類ありECSとFargateがある。 Fargateに絞って書く
Fargateとは
コンテナ向けであるためEC2のように単体では使用できず、ECSかEKSで利用する
サーバーのスケーリング、パッチ適用、保護、管理にまつわる運用上のオーバーヘッドが発生しない。これにより、アプリ開発に専念できるようになる
・コンテナごとにENIがアタッチされるため、コンテナごとにIPが振られるため起動に若干時間がかかる
ECR
・App Runner
利用者がコードをアップロードするだけでコードを実行できるサービス。AWS側で基盤となるコンピューティングリソースを構築してくれるフルマネージドサービス。
App Runner
2021年5月にGA(一般公開)となったサービス。プロダクションレベルでスケール可能なwebアプリを素早く展開するためのマネージドサービス。Githubと連携してソースコードをApp Runnerでビルドとデプロイができるだけでなく、ECRのビルド済みコンテナイメージも即座にデプロイできる。
ECSとFargateの場合、ネットワークやロードバランシング、CI/CDの設定などインフラレイヤに関わる必要があり、ある程度のインフラ知識は必要になる。App Runnerはそれらインフラ周りをすべてひっくるめてブラックボックス化し、マネージドにしていることが特徴である。
ECS Fargateを利用した場合のコスト、拡張性、信頼性、エンジニアリング観点
【コスト】
EC2より料金は割高。ただし、年々料金は下がってきている。
【拡張性】
デプロイの速度 遅め
理由1 コンテナごとにENIが割り当てられるため。ENIの生成に時間がかかる
理由2. イメージキャッシュができないため。コンテナ起動時にコンテナイメージを取得する必要がある。
タスクに割り当てられるエフェメラルストレージは200GB。容量は拡張不可。ただし永続ストレージの容量が必要な場合はEFSボリュームを使う手もある。
割り当て可能リソースは4vCPUと30GB。機械学習に用いるノードのような大容量メモリを要求するホストとしては不向き
【信頼性】
Fargateへのsshログインは不可。Fargate上で起動するコンテナにsshdを立ててsshログインする方法もあるが、セキュアなコンテナ環境にsshの口を開けるのはリスキーである。他にSSMのセッションマネージャーを用いてログインする方法もあるが、データプレーンがEC2の時に比べると手間がかかる。
しかし、2021年3月にAmazon ECS Execが発表され、コンテナに対して対話型のシェルや1つのコマンドが実行可能となった。
Fargateの登場からしばらく経過し、有識者や経験者は増え、確保しやすい。
多数のユーザーに使ってもらう
CI/CDパイプラインを形成し、アプリリリースに対するアジリティを高める
各レイヤで適切なセキュリティ対策(不正アクセス対策、認証データの適切な管理、ログ保存、踏み台経由の内部アクセス)を施したい
2章まとめ、感想
AWSが提供するコンテナサービスにはいくつかあり、なかでもFargateというフルマネージドなデータプレーンがよく使われている。ホスト管理が不要でインフラ関連の工数を削減できる一方、EC2より料金が高く、起動に若干時間がかかるのが難点である。
3章
この章では運用設計、ロギング設計、セキュリティ設計、信頼性設計、パフォーマンス設計、コスト最適化設計について述べている。
Fargate利用時のシステム状態を把握するためのモニタリングやオブザーバビリティに関する設計、不具合修正やデプロイリスク軽減のためのCI/CD設計が必要である。
モニタリングとは
システム内で定めた状態を確認し続けることであり、その目的はシステムの可用性を維持するために問題発生に気づくこと
オブザーバビリティとは
オブザーバビリティの獲得によって、原因特定や対策の検討が迅速に行えるようになる
・cloud watch logs
・Firelens
AWS以外のサービスやAWS外のSaaSと連携することも可能
Firehoseを経由してS3やRed shift やOpenSearch Serviceにログを転送できる
fluent bitを利用する場合、AWSが公式に提供しているコンテナイメージを使用できる
- ソフトウェアやライブラリの脆弱性は日々更新されており、作ってから時間が経ったイメージは脆弱性を含んでいる危険がある。
- 方法
脆弱性の有無はECRによる脆弱性スキャン、OSSのtrivyによる脆弱性スキャン
継続的かつ自動的にコンテナイメージをスキャンする必要があるため、CI/CDに組み込む必要がある。しかし頻繁にリリースが行われないアプリの場合、CICDパイプラインが実行されず、同時にスキャンもなされないということになるため、定期的に行うスキャンも必要になる。
cloud watch Eventsから定期的にLambdaを実行してECRスキャンを行わせる(スキャン自体は1日1回のみ可能)
Fargateの場合、サービス内部のスケジューラが自動でマルチAZ構成を取るため、こちらで何かする必要はない。
・障害時切り離しと復旧
ECSはcloud watchと組み合わせることでタスク障害やアプリのエラーを検知できるうえに、用意されてるメトリクスをcloud watchアラームと結びつけて通知を自動化できる
ALBと結びつけることで、障害が発生したタスクを自動で切り離す
AWS内部のハードウェア障害や、セキュリティ脆弱性があるプラットフォームだと判断された場合、ECSは新しいタスクに置き換えようとするその状態のこと。
Fargateの場合、アプリはSIGTERM発行に対して適切に対処できる設定にしておかなくてはならない。そうしておかないとSIGKILLで強制終了されてしまう。データ不整合などが生じて危険。
ALBのリスナールールを変更し、コンテンツよりもSorryページの優先度を上げることで対処可能
自動でクォータは引き上がらない
cloud watch メトリクスなどで監視する必要がある。
パフォーマンス設計で求められることは、ビジネスで求められるシステムの需要を満たしつつも、技術領域の進歩や環境の変化に対応可能なアーキテクチャを目指すこと
利用者数やワークロードの特性を見極めつつ、性能目標から必要なリソース量を仮決めする
FargateはAutoscalingの利用が可能で、ステップスケーリングポリシーとターゲット追跡スケーリングポリシーがある。どちらのポリシー戦略をとるかを事前に決める
既存のワークロードを模倣したベンチマークや負荷テストを実施してパフォーマンス要件を満たすかどうかを確認する
・スケールアウト
サーバーの台数を増やすことでシステム全体のコンピューティングリソースを増やそうとする概念。可用性と耐障害性が上がる。既存のタスクを停止する必要は原則ない。
スケールアウト時の注意
・Fargate上のECSタスク数の上限はデフォルトでリージョンあたり1000までであること。
ECSタスクごとにENIが割り当てられ、タスク数が増えるごとにサブネット内の割当可能なIPアドレスが消費されていく
Application Autoscaling
Cloud Watchアラームで定めたメトリクスの閾値に従ってスケールアウトやスケールインを行う
CPU使用率が60~80%ならECSタスク数を10%増加し、80%以上なら30%増加する、という任意のステップに従ってタスク数を増減させる
ワーママになったはいいが、マジで時間が足りない。自分をもう1人ほしい。
子育てもなるべく傍にいてあげたい、
仕事も趣味もない人がいたら、その人の身体を乗っ取ってロードバランサーをかませて負荷分散したい。
冷静に考えて専業主婦の人がやってることをやりつつ、一人前とは言えないかもしれないが仕事もフルタイムでやるって無理があるんだな。
保育園はあるけど保育料がそこそこかかるし、当然ながら仕事してる時間しか預かってもらえないし。
子が体調を崩したり何か子の用事がある時は突発的に仕事ができなくなって、チームの足を引っ張る。
仕事量は多いままだから、子を寝かしつけた後に睡眠を削って仕事に戻る。
たぶんこんなの客観的に見て全部ワーママならあたりまえのことなんだろうけど、自分がなってみて初めて、これきついなって思わされた。
というか、核家族で子育てしながら働くということが、未だに周りに負担をかけるか本人が無理することでしかなしえない状態だ。
同年代でも子を持たない人達が増えて、その人たちの生活が優雅で羨ましく、妬ましく見えるのもしんどい。
アルコールなんてずっと飲んでいないし、綺麗な服も着ず、イベント事や映画、お洒落な店なんかもそうそう行けない。
金銭的なプラスマイナスとかは気にしていないが、結局子が可愛いのは可愛いし、道楽のつもりで楽しむしかないのかもしれないな、と思う。
素人所感だと、
関数は、「インプット」「アウトプット」「処理」の要素から成立していることとかね!
関数を理解すると、「ソフトウェアは関数の集合にすぎないこと」「機械学習は所詮関数の一種にすぎない」のように、「得体のしれない便利なもの」という理解から進めるからね!
関数を理解できれば、Excelはもちろん、熱量計算とか言語分析とか各専門分野で利用できるからね!
「プログラミングを教えるべき!」ってのは「関数を理解させるべき!」って意味だと思うんだよね。
例えば「ソフトウエアにおけるアプリケーション層、データ層…」とか「ハードウェアにおけるサーバ、データベース、ロードバランサー…」とか「ネットワークにおける物理層、セッション層…」とかね!
レイヤー構造を理解すると、全体と部分の関係がはっきりして、各要素の理解が進むからね!
レイヤー構造を理解できれば、情報処理に限らず、ものごとを整理して理解することに役立つよね!
法は、各法の目的の理解かな!何のために存在して、法改正によってどう影響があるか理解できるからね!
各条文を細かに理解する必要はないけれど、条文の読み方は修得させたいよね!
契約は、騙されないためにだね!
http://anond.hatelabo.jp/20170305115905 を増田以外のホットエントリで見ると。
コメント率 | タイトル | コメント数/ブクマ数 | ブクマページ |
---|---|---|---|
0.0% | Python3.6 から追加された文法機能 - Qiita | 0/96 | b.hatena.ne.jp/entry/324476241 |
0.8% | 文章をベクトル化して類似文章の検索 - Qiita | 2/245 | b.hatena.ne.jp/entry/324662835 |
1.0% | [wip] 会社のサーバサイドエンジニアにReactとかReduxのことを説明する資料 - Qiit | 1/97 | b.hatena.ne.jp/entry/319535213 |
1.1% | 機械学習とディープラーニングの入門者向けコンテンツまとめ - Qiita | 1/94 | b.hatena.ne.jp/entry/321793279 |
1.9% | Web制作時の概算費用と想定納品日を簡単に計算する票をつくってみた – のんびりデザインしているよう | 7/375 | b.hatena.ne.jp/entry/320010979 |
2.0% | 最近見かけるレイアウト・ナビゲーション・スライダー・フォームなどがどうやって実装されているのかのまと | 7/344 | b.hatena.ne.jp/entry/322198623 |
2.2% | フロントエンド知らない私のwebpack入門 その1 - Qiita | 4/186 | b.hatena.ne.jp/entry/319233247 |
2.3% | フルマネージドのSaaS型クラウド・データベース・サービスdashDBの活用スタイルとは ~手間いら | 5/216 | b.hatena.ne.jp/entry/323891713 |
2.4% | Pythonをやるときに参考になりそうな情報 - のんびりSEの議事録 | 19/807 | b.hatena.ne.jp/entry/322300431 |
2.5% | React基礎 · GitBook | 17/681 | b.hatena.ne.jp/entry/321494522 |
2.7% | 開発効率を上げるテスト設計 // Speaker Deck | 5/183 | b.hatena.ne.jp/entry/323584734 |
2.8% | 畳み込みニューラルネットワークの可視化 - 人工知能に関する断創録 | 3/108 | b.hatena.ne.jp/entry/322431100 |
2.8% | グランブルーファンタジーを支えるインフラの技術 // Speaker Deck | 10/359 | b.hatena.ne.jp/entry/324611754 |
2.9% | 仮想DOMの内部の動き | プログラミング | POSTD | 6/206 | b.hatena.ne.jp/entry/321289144 |
3.0% | 金融データのPythonでの扱い方 - 今日も窓辺でプログラム | 16/527 | b.hatena.ne.jp/entry/322842311 |
3.1% | Python Jupyter notebookでpandasを使いCSVを読み込みグラフを描画してp | 5/162 | b.hatena.ne.jp/entry/321556884 |
3.1% | React Redux Real World Examples 〜先人から学ぶReact Redux | 9/290 | b.hatena.ne.jp/entry/323749846 |
3.2% | Awesome Python:素晴らしい Python フレームワーク・ライブラリ・ソフトウェア・リ | 15/472 | b.hatena.ne.jp/entry/319013267 |
3.2% | 履歴書の志望動機|最速で書く方法と受かる書き方 | 14/433 | b.hatena.ne.jp/entry/279613157 |
3.4% | 今日からはじめるGitHub 〜 初心者がGitをインストールして、プルリクできるようになるまでを解 | 38/1128 | b.hatena.ne.jp/entry/318690305 |
3.4% | スケーラブル GCP アーキテクチャ | 6/178 | b.hatena.ne.jp/entry/322723492 |
3.5% | アーキテクチャから新しい! 初めてのエディタには、21世紀生まれの「Atom」がおすすめ【続・若手エ | 11/311 | b.hatena.ne.jp/entry/322534650 |
3.5% | フロントエンドの基礎知識 // Speaker Deck | 15/423 | b.hatena.ne.jp/entry/322749937 |
3.7% | ロードバランサー再入門 | ツチノコブログ | 26/704 | b.hatena.ne.jp/entry/323163487 |
3.7% | APIサーバを立てるためのCORS設定決定版 - Qiita | 5/134 | b.hatena.ne.jp/entry/321742626 |
3.8% | 【画像】こんなのソフマップじゃないwwwwwwwwwwwwww|ラビット速報 | 5/131 | b.hatena.ne.jp/entry/321219627 |
4.0% | 【動画あり】人志松本のゾッとする話のあるある探検隊の話怖すぎwwwwww | 2ちゃんねるスレッドま | 10/252 | b.hatena.ne.jp/entry/319507149 |
4.0% | (翻訳)2017年の展望: pandas, Arrow, Feather, Parquet, Spa | 7/176 | b.hatena.ne.jp/entry/324411617 |
4.2% | 【たまに行くよ!って人向け】いつもと少しちがう東京ディズニーシーデートにするための5つの方法 @ja | 3/72 | b.hatena.ne.jp/entry/321496344 |
4.3% | 高速なシステムを作る方法 // Speaker Deck | 9/211 | b.hatena.ne.jp/entry/283448858 |
4.3% | 処分・廃棄にお金は要らない!?パソコンを無料引取してくれる業者一覧 | 7/162 | b.hatena.ne.jp/entry/320803373 |
4.3% | スタディサプリを支えるデータ分析基盤 ~設計の勘所と利活用事例~ | 3/69 | b.hatena.ne.jp/entry/322583838 |
4.4% | 「Front-End Developer Handbook 2017」がGitBookで無償公開。フ | 24/542 | b.hatena.ne.jp/entry/318947145 |
4.6% | デブサミ2017「DeNAの機械学習基盤と分析基盤」講演メモ #devsumi - 元RX-7乗りの | 7/152 | b.hatena.ne.jp/entry/322562611 |
4.6% | 大量の要素を高速に表示するためのバーチャルレンダリング入門 / Virtual Rendering | 6/130 | b.hatena.ne.jp/entry/323604383 |
4.7% | MySQLアンチパターン | 22/473 | b.hatena.ne.jp/entry/319218778 |
4.7% | 5年間コードを書き続けたエンジニアが、新人に読んでもらいたい11冊+αを紹介する - エンジニアHu | 47/1006 | b.hatena.ne.jp/entry/313934939 |
4.7% | グーグル社員も長友選手も行う集中力を高める方法 - 自分で学ぶ心理学 | 20/427 | b.hatena.ne.jp/entry/322090614 |
4.8% | 例の機械学習コースが良いらしいと知りながらも2年間スルーし続けたがやはり良かったという話 - Qii | 68/1418 | b.hatena.ne.jp/entry/321403591 |
4.9% | NoSQL を使用する場合と SQL を使用する場合 | Microsoft Docs | 28/577 | b.hatena.ne.jp/entry/322834020 |
4.9% | Awesome Selenium : 素晴しい Selenium ライブラリの数々 - Qiita | 5/102 | b.hatena.ne.jp/entry/321629987 |
4.9% | 誰でもできる、プレゼンが劇的にうまくなる基本テクニック - 科学と非科学の迷宮 | 77/1557 | b.hatena.ne.jp/entry/318913434 |
5.0% | 脆弱性発見者が注目する近年のWeb技術 // Speaker Deck | 24/481 | b.hatena.ne.jp/entry/319516657 |
5.1% | たった3つのコトで仕事が楽になる!「できる上司の会議」がマジで真似したい | CuRAZY [クレイ | 7/138 | b.hatena.ne.jp/entry/322534334 |
5.1% | 日経電子版を支える基盤API // Speaker Deck | 13/256 | b.hatena.ne.jp/entry/319592914 |
5.1% | 30歳から始める数学 - Shoyan blog | 50/982 | b.hatena.ne.jp/entry/323617832 |
5.1% | インフラチームと開発チームの垣根をなくすためにAWSのCI環境を構築した話 - VOYAGE GRO | 20/392 | b.hatena.ne.jp/entry/323171376 |
5.1% | 『How to Get Startup Ideas』 - いかにスタートアップのアイデアを得るか - | 17/333 | b.hatena.ne.jp/entry/324384439 |
5.1% | 無料でウェブサイトやブログに使える写真を検索可能な28サービスまとめ - GIGAZINE | 18/350 | b.hatena.ne.jp/entry/323600897 |
5.2% | 内向的な人のための面接ガイド - GIGAZINE | 14/271 | b.hatena.ne.jp/entry/322036523 |
Python、データベース関連が目立つ。コメント無しで96ブクマに達するPythonさん凄い。マウンティング心?を刺激しないのだろうか。炎上したくない人はインデントに気をつけながらオブジェクト指向で書くといい。
コメント率 | タイトル | コメント数/ブクマ数 | ブクマページ |
---|---|---|---|
74.5% | はてブに要望「返信出来るようにして欲しい」 - interact | 114/153 | b.hatena.ne.jp/entry/319990286 |
73.5% | 「あなたが朱雀とか白虎とか四神を覚えたキッカケは何?」という質問に対し世代がバレそうになる人々→「幽 | 319/434 | b.hatena.ne.jp/entry/322198765 |
67.8% | 内海 聡さんのツイート: "あなたが甲殻類のアレルギーだった場合、あなたの心は殻に閉じこもっている可 | 449/662 | b.hatena.ne.jp/entry/318821783 |
67.4% | 日米首脳会談 首相は「ドラえもん」のスネ夫になった!民進党の野田幹事長が批判 (産経新聞) - Ya | 95/141 | b.hatena.ne.jp/entry/321930776 |
65.7% | いい記事書けばブクマつくとか嘘っぱち!こんな嘘がまかり通るはてな界に物申すっ! - ゆるくいきていく | 260/396 | b.hatena.ne.jp/entry/323206934 |
65.5% | 痛いニュース(ノ∀`) : 梅沢富美男(66)、老害判定に怒り 「日本は俺達が作ったんだぞ!」 - | 190/290 | b.hatena.ne.jp/entry/322785094 |
65.5% | 茶碗に米粒を残した状態で「完食」する人は完全悪ではないけど相容れられない、という話に意見続々 - T | 413/631 | b.hatena.ne.jp/entry/321479096 |
64.6% | けものフレンズを視聴1分30秒で挫折。 - 自由ネコ | 122/189 | b.hatena.ne.jp/entry/321589678 |
63.7% | 「けものフレンズ」コスプレ批判に対する異論まとめ - Togetterまとめ | 228/358 | b.hatena.ne.jp/entry/323622485 |
63.6% | 『レジでバレる!二流の人の超ヤバい3欠点』という東洋経済の記事を読んで。クレジットカードのイメージは | 119/187 | b.hatena.ne.jp/entry/323599229 |
63.5% | 痛いニュース(ノ∀`) : 日本在住のイスラム教徒の子どもがハラール非対応給食に苦慮→学校側に配慮求 | 290/457 | b.hatena.ne.jp/entry/321128745 |
63.0% | あざなわさんの炎上とはてな村の権威のなさ - メロンダウト | 133/211 | b.hatena.ne.jp/entry/323813866 |
62.7% | プレミアムフライデーって何でこんなに叩かれてるんだろう? - シャイニングマンの「勇気を君に」 | 126/201 | b.hatena.ne.jp/entry/324113658 |
62.5% | 飯田譲治さんのツイート: "日本が悪い日本が悪いって、民間人は殺さないってルール破って、原爆落として | 65/104 | b.hatena.ne.jp/entry/321434534 |
62.4% | 偏差値40の大学は日本に必要なのか?子供を焼き殺す大学に補助金は不要 - カキカエブログ | 166/266 | b.hatena.ne.jp/entry/318786744 |
62.2% | 坂上忍 清水富美加の月給5万円は正当「僕らの時もそうだった」 (デイリースポーツ) - Yahoo! | 237/381 | b.hatena.ne.jp/entry/321888913 |
61.9% | 清水富美加17日著書出版「全部、言っちゃうね。」 - 芸能 : 日刊スポーツ | 73/118 | b.hatena.ne.jp/entry/322431771 |
61.5% | 警視庁捜査1課長が竹刀で23歳美人記者をボコボコ (文春オンライン) - Yahoo!ニュース | 415/675 | b.hatena.ne.jp/entry/322218394 |
60.7% | 「ゴルフに興じる首相、誇れない」民進・蓮舫氏:朝日新聞デジタル | 136/224 | b.hatena.ne.jp/entry/321608217 |
60.6% | 金があるのに、理屈をつけてコンテンツに金を落とさない」連中について - うらがみらいぶらり | 243/401 | b.hatena.ne.jp/entry/321324226 |
60.6% | 痛いニュース(ノ∀`) : 中学校で「やばい」という言葉を使用禁止に 若い世代で意味が多様化 - ラ | 132/218 | b.hatena.ne.jp/entry/324642052 |
60.3% | 受動喫煙対策「東京だけでやれ」 自民党内で反対論噴出:朝日新聞デジタル | 241/400 | b.hatena.ne.jp/entry/321316384 |
60.1% | 娘の卒業式用の服を買いに行ったら驚愕した - コバろぐ | 92/153 | b.hatena.ne.jp/entry/321299915 |
60.1% | 「洗剤いらず」スポンジで教頭などが児童の体こすりけが | NHKニュース | 215/358 | b.hatena.ne.jp/entry/322584234 |
60.0% | 松井一郎さんのツイート: "長谷川さんが、ブログで伝えたかったのは、健康であるための自己管理の重要性 | 201/335 | b.hatena.ne.jp/entry/320414066 |
Web系は動けばよいで、セキュリティー忘れて、大問題になった、例が過去どれだけあるかを説明しないといけないのは、とっても手間だよね。
あと、Web系でもベンチマークは必要。マシン2台と1台の差はあまりないかもしれないけど、200台と100台の差は結構あるし。
電気代や、サーバーラック代、メンテナンス費用、などのランニングコストに効いてくる。
ロードバランサーも高い物を検討しないといけなくなってくる。
システムから見れば、Web系でもベンチマークをしてトータルソリューションのコストダウンすることは非常に重要。
というのを説明しないと行けないのは、とっても手間だよね。
わかります。
訳してみた。あらためて、和訳はものすごく時間を要する作業だということがわかった。もうしないと思う。
注意:以下は意訳、適当訳、稚拙訳であり、誤訳を多々含んでいることは確実であり、Joel氏が本当に以下のように述べているとは限りません。
なぜMicrosoft Officeファイルフォーマットはこんなにもややこしいのか (そしてその対処法を幾つか)
Tuesday, February 19, 2008
先週、MicrosoftはOfficeのバイナリフォーマットを公開したが、このフォーマットは殆ど正気でないように見える。Excel 97-2003ファイルフォーマットは349ページのPDFファイルだ。でも待って、それで全部じゃない。このドキュメントには次の面白いコメントが書いてある。
それぞれのExcelワークブックは1つのcompound fileに収められている
つまり、Excel 97-2003ファイルはOLE coumpound documentで、それは結局、1つのファイル内にあるファイルシステムである。これは、理解するのにあと9ページはスペックを読まなくちゃならないぐらいには十分に複雑だ。そしてこれらの「スペック」は、普通我々が考えるようなスペックというよりは、Cデータ構造みたいに見える。これ全体が階層的ファイルシステムなのだ。
もしあなたが週末を、Wordドキュメントをブログにインポートしたり、あなたの個人的な財務データからExcelフォーマットのスプレッドシートを生成するような気の利いたコードを書くのに使おうと思ってこれらのドキュメントを読み始めたなら、このスペックのややこしさと長さがそんな気をあっという間に失せさせるだろう。普通のプログラマはこのOfficeバイナリファイルフォーマットについて次のような結論を下す:
この4つ全てについて、きみは間違っている。ちょっとだけ掘り下げて、これらのファイルフォーマットがどうしてこんなに信じがたいくらいに複雑なのか、なぜMicrosoftの悪いプログラミングを反映しているのではないのか、そしてそれを回避するためにあなたに何ができるか、を明らかにしよう。
理解すべき最初のことは、これらのバイナリファイルフォーマットはちょっと違ったデザインゴールを持って設計されたということだ。たとえばHTMLとは。
これらはすごく古いコンピュータで速く処理できるようにデザインされた。Excel for Windowsの初期のバージョンでは、1MBのRAM、20MHz動作の80386が Excelを快適に走らせることができるための妥当なものだった。このファイルフォーマット内には、ファイルを素早く開いたり閉じたりするための最適化が沢山仕込まれている:
これはライブラリを使うことを想定して設計されている。もしあなたがバイナリをインポートするものを1から書き上げたいと思ったら、Windows Metafile Format (何か図を描く場合) や OLE Counpound Storage みたいなものをサポートしなくてはいけなくなる。もしあなたが Windows上でやるのなら、そうしたことをたいしたことのない作業にするためのライブラリのサポートが存在する... そういったフィーチャーを使うことは(元々)マイクロソフトチームのためのショートカットだった。でもあなたが全部を自分でスクラッチから書くなら、全部の作業を自分自身でやらなくてはいけない。
オフィスはcompound documentsに対して広範囲のサポートを持っている。例えば、スプレッドシートをWord文書に埋め込んだりできる。完璧なWordファイルフォーマットのparserは、同じように、埋め込まれたスプレッドシートで何かインテリジェントなことが出来るべきだろう。
それは相互協調性(interoperability)を意識してデザインされてはいない。仮定されていたのは、WordファイルフォーマットはWordからのみ読み書きされなくてはいけない、ということで、それは当時においては十分に合理的なものだった。これは、Wordチームのプログラマがファイルフォーマットをどう変更するかについて決定を行う場合にはいつでも、彼らが気にするのは (a)何が高速か (b)Wordのコードベースにおいて最小の行数になるのは何か、だったことを意味する。SGMLやHTML-interchangeableといった標準ファイルフォーマットのようなアイデアは、最初にインターネットがドキュメントの相互交換を実現するまで現実のものにはならなかった。それはOfficeバイナリフォーマットが最初に考案されてから10年後のことだったのだ。ドキュメントを交換するのにインポーターとエクスポーターを使うことができるという仮定が常にあった。実際Wordは簡便な交換のために設計されたRTFと呼ばれるフォーマットを持っており、そのフォーマットは殆ど最初のころからあり、今も100%サポートされている。
それはアプリケーションの全ての複雑さを反映していなくてはいけない。 全部のチェックボックス、全部のフォーマッティングオプション、そして全部の、Microsoft Officeのフィーチャーは、ファイルフォーマットのどこかで叙述されていなくてはいけない。Wordのパラグラフメニューにある、"Keep With Next" と呼ばれるチェックボックス、これはパラグラフを、その後ろのパラグラフと同じページに置くのに必要な場合は、次のページに移動させるもの(?)だが、これもファイルフォーマットの中に無くてはいけない。そしてこれはつまり、あなたがWordドキュメントを正しく読み込める完璧なWordクローンを実装したいなら、そういったフィーチャーを実装しなくてはいけないということだ。Wordドキュメントをロードする競争力のあるワードプロセッサを作っているのなら、ファイルフォーマットからそのビットをロードするコードを書くのには1分しかかからないかもしれないが、ページのレイアウトアルゴリズムをそれに対応させるのに何週間もかかるかもしれない。もしあなたがそうしない場合、カスタマーがあなたのクローンでWordファイルを読み込んだら、全部のページがぐちゃぐちゃになってしまうだろう。
それはアプリケーションの歴史を反映していなくてはいけない。 このファイルフォーマットに見られる多くの複雑さは、古く、複雑で、愛されず、めったに使われないフィーチャーを反映している。それらはファイルフォーマットのなかに後方互換性のためにまだあり、そしてMicrosoftにとってその辺りのコードを残しておくことには何らコストはかからない。しかしあなたがこれらのファイルフォーマットをparseおよびwriteする一貫した完全な仕事をしたいと思うなら、Microsoftのインターンが15年前にやったのと同じことを全て、またやらなくてはいけない。要点は、何千人年の仕事が今のWordやExcelには費やされてきたのであり、これらのアプリケーションの完璧なクローンを作りたいと本当に欲するなら、あなたは何千人年を費やさなくてはならないことになる、ということだ。ファイルフォーマットは単に、アプリケーションがサポートする全てのフィーチャーの簡潔なサマリーなのだ。
手始めに、小さな例を一つ、深く見てみよう。Excelのワークシートは色々なタイプのBIFFレコードの集まったものだ。私はスペックの一番最初のBIFFを見てみたい。1904と呼ばれるレコードだ。
Excelファイルフォーマット仕様のこのレコードについての記述は非常に曖昧なものだ。そこでは単に、1904レコードが「1904日付システムが使われているかどうか」を示すレコードだ、と述べているだけだ。ああ、使えない仕様書の典型的な一例だ。あなたがExcelファイルフォーマットで何かしている開発者で、そしてファイルフォーマット仕様にこう書いてあるのを見つけたなら、あなたがMiocrosoftは何かを隠しているのだと結論付けたとしても無理はない。この情報の断片は十分な情報をあなたに与えはしない。あなたには幾ばくか外部の情報が必要で、私は今ここで、それを提供しよう。Excelワークシートには、2種類ある。日付のエポックが1900/1/1のもの(これには、Lotus 1-2-3 との互換性のために故意に入れられた閏年に関するバグがあるが、ここでそれについて述べるのは退屈すぎる)、および、1904/1/1のものだ。Excelは両方をサポートしているが、それはExcelの最初のバージョンはMac版であり、それは単に簡単だったという理由でOSのエポックを使っていて、しかしWindows版のExcelは1-2-3のファイルをインポートできなくてはならず、そしてそれは1900/1/1をエポックとして採用していたからだ。あなたが涙ぐむのも無理はない。歴史のどの時点においても、プログラマが正しいことをしなかった、という時はないのだが、しかし現実にあなたが手にしているものはこれなのだ。
1900と1904のファイルタイプは両方とも世の中には広く存在しており、それは通常、ファイルがWindowsとMacのどちらで作られたかによる。一方のタイプから他方のタイプへ黙って変換するのはIntegrity的に問題があるので、Excelはファイルタイプを変換することをしない。Excelファイルをparseするためには、あなたは両方を扱わなくてはならない。それはファイルからこのbitをロードするだけの問題ではなく、あなたが日付表示と両方のエポックを扱うparsingのコードまで書き直さなくてはいけないということを意味する。実装には何日かかかるだろうと私は思う。
実際、あなたがExcelクローンの作業をするなら、日付の扱いについて、あらゆる種類の微妙なディティールを発見することになるだろう。Excelは日付の値をいつ変換するのか? 表示の整形はどうやっているのか? なぜ1/31は今年の January 31と翻訳され、また一方で1/50はJanuary 1st, 1950と翻訳されるのか? Excelのソースコードと同じだけの量のドキュメントを書かないがぎり、振る舞いに関しての微妙なビットを全て完全に記述することはできない。
そしてこのレコードは、あなたが扱う何百もあるBIFFレコードの最初の1つに過ぎず、しかももっとも単純なものなのだ。他のレコードの殆どは、より多くのプログラマーを涙に暮れさせるぐらいには十分複雑だ。
唯一導き得る結論はこれだ。
MicrosoftがMicrosoftとOfficeのファイルフォーマットをリリースしたことは大変有用なことだが、しかしそれでOfficeファイルフォーマットをインポートしたり保存したりするのが楽になるということは全く無さそうだ。それらは狂気じみて複雑で、リッチなアプリケーションで、そしてあなたは人気のある20%の部分を実装して80%の人々を幸せにするというくらいのことしかできない。バイナリファイル仕様によってなされるのは、多く見積もっても、著しく複雑なシステムのリバースエンジニアリングにかかる時間を何分か削減するくらいだろう。
オーケー, 私はいくつか回避法を教えると約束した。良いニュースは、殆どの良く知られたアプリケーションにとって、Officeバイナリファイルフォーマットを読み書きしようと試みることは誤った決定だということだ。あなたが真剣に考えなくてはいけない代案が2つある。Officeそのものにそれをやらせるか、書き込むのが簡単なファイルフォーマットを使うかだ。
ヘビーな仕事はOfficeにやらせよう。WordとExcelは実に完全なオブジェクトモデルを持っており、COMオートメーションの手段が可能で、これであなたは何でもプログラムでやるようにできる。多くのシチュエーションでは、Office内のコードを再利用するほうがそれを実装しようとするよりも良い。ここにいくつか例がある。
この手のアプローチは、全ての種類の一般的なOfficeタイプについての、サーバ上であなたがやりたいと思うであろうアプリケーションで、うまくいくだろう。例えば:
これらのケースの全てにおいて、Officeオブジェクトにインタラクティブ動作でないことを教えてやる方法があり、だから表示をアップデートするのに煩わされたり、ユーザに入力を促す必要はない。ところで、このようなやりかたでいく場合には、gotchas(?)がいくつかあり、そしてそれはMicrosoftは公式にサポートしているものではない。だからあなたがそれを始める前にはKnowledge baseの記事を読むように。
書き込むファイルにはもっとシンプルなフォーマットを使いなさい。単にOfficeドキュメントをプログラムで生成したいなら、殆どいつでもOfficeバイナリフォーマットよりももっと良いフォーマット、WordやExcelでも問題なく開くことができるようなフォーマットが存在する。
いずれにせよ、全てのOfficeファイルを完全に読み書きできるような、文字通りのOffice競合製品を作ろうとする(その場合には、何千年もの作業があなたに予約される) のでない限り、Officeバイナリフォーマットの読み書きをするというのは、何であれあなたが解決しようとしている問題を解決するためのもっとも労働集約的な方法だ。