投稿

ラベル(モデリング)が付いた投稿を表示しています

技術者教育の視点で読む「大規模サービス技術入門」

[Web開発者のための]大規模サービス技術入門 ― データ構造、メモリ、OS、DB、サーバ/インフラ 2010/7/7日 伊藤直也,田中慎司 著 [Web開発者のための]大規模サービス技術入門 (Amazonで書籍情報を表示) この本の冒頭にある「本書について」には以下のように書かれています。 本書は、大規模サービスを開発・運用する技術者のための入門書です。 インフラレベルから(主に全文検索を例とした)アプリケーション開発まで、大規模サービスを構築するために必要な技術が俯瞰的に述べられています。 ところで「はてな」では毎年夏に学生向けの就職体験を目的としたインターンシップを実施しているとのことで、インターンシップ企画を通じて、「はてな」では大規模サービス技術の教育方法が体系化されたとのことです。 本書では、このインターンシップでの講義をベースにして、大規模サービス技術を解説することを試みています。 私はこの本が出版された当時に買って読みました。しかしその時は興味あるところだけつまみ食いしただけで正直言えば印象が薄かったのですが、最近読み返したところ「教育方法の体系化」という点で非常に興味を持ちました。 今となっては少し古めの本かもしれませんが、本書に書かれている具体的な技術以上にとても勉強になり、面白さを感じたため取り上げることにしました。 <本の内容> はてなインターンシップの講義ベースと書き下ろしで構成されており、授業を受けている感じで進みます。私の学生時代にはこのような機会は無かったのですが、このようなインターンシップを体験できる学生さんが羨ましい。。。 【目次】 第1回 大規模Webサービスの開発オリエンテーション―全体像を把握する Lesson 0 本書の源 ―本書で説明すること,しないこと Lesson 1 大規模なサービスと小規模なサービス Lesson 2 成長し続けるサービスと,大規模化の壁 Lesson 3 サービス開発の現場 第2回 大規模データ処理入門 ―メモリとディスク,Webアプリケーションと負荷 Lesson 4 はてなブックマークのデータ規模 ―データが大きいと処理に時間がかかる Lesson 5 大規模データ処理の難所 ―メモリとディスク Lesson 6 スケーリングの要所 Lesson ...

Distributed Systems / 分散システム ― 原理とパラダイム

Distributed Systems / 分散システム ― 原理とパラダイム 今や分散システムではないシステムというものは殆ど考えられなくなってきました。今回はその分散システムに関する有名な分厚い教科書を取り上げます。 教科書といっても、お堅い数学書のようなものではなく、分散処理に関する基礎技術を網羅し、かつ、私のような実務者にも理解できるような丁寧な解説書といった雰囲気の本です。 この本の初版のサブタイトルに「原理とパラダイム」とあるように、単なる理論書ではなく、その応用システムにも触れられているので実務者にも親しみやすいと思います。 分散処理技術は現代のシステム構築にはいわば必須の技術なので、実務者としても、その基礎的な原理は抑えておきたいところです。自分が今使っている技術が全体のどのあたりに位置するものかが分かります。 が、そんなにストイックに考えなくても、ざっと斜め読み流して世の中にはどのような分散処理技術があるのかという雑学的知識を得るとか、システム設計や構築におけるキモや選択肢を知るとか、何らかのアイディアを得るため、などのような読み方もできます。 ところで、初版は 2002年あたりですが、コンピューティング分野の進展はすさまじいので、改定が続けられています。 現在の最新版は、英語ですが第4版です。 Distributed Systems ペーパーバック – 2023/1/8 日本語版は初版と第2版までのようです。 分散システム 第二版  2009/1 分散システム―原理とパラダイム  2003/10 なお、英語版ですが、この本の第二版以降は、以下のサイトから無料でPDF版(personalized copy)を入手できます。 Distributed Systems 4th edition (2023) Distributed Systems 3rd edition (2017) Distributed Systems 2nd edition (2007) これらは著者の一人の Maarten van Steen 先生がホストしているようで、スライドやソースコード等の資料もダウンロードできます。 DISTRIBUTED-SYSTEMS.NET https://www.distributed-sys...

JavaScriptで学ぶ関数型プログラミング

イメージ
JavaScriptで学ぶ関数型プログラミング Michael Fogus 著、和田 祐一郎 訳 2014年01月 JavaScriptで学ぶ関数型プログラミング (Amazonで書籍情報を表示) 最近のプログラム、特に UI 系のプログラムでは、map などを使ったコードを当たり前のように目にするようになりました。関数型プログラミングに由来するコードが増えてきたと思います。 関数型プログラミングの考え方は新しいものではありませんが、最近のプログラミング言語は、関数型プログラミングっぽいスタイルのコードが書けるように、これらの機能を標準レベルでサポートする傾向にあると思います。 そうなると、map や filter などを単なる便利な機能という使い方から少しレベルを上げて、関数型プログラミングとはどのようなものか?ということを知りたくなります。 とはいいつつも、実務で Haskell のような言語を使うわけではないので、実務に直接役立ちそうなレベルで関数型プログラミングのエッセンスを知りたい、というのも人情です。 そんな時にお勧めしたいのが今回取り上げる本「JavaScriptで学ぶ関数型プログラミング」です。 以下はこの本のスタンスと思われる記載(5.2)を抜粋したものです。 本書は関数型プログラミングの美徳を熱く説くものではありません。世の中には様々な関数型のテクニックが存在し、それぞれがソフトウェア開発における複雑性を飼いならすための手段となります。しかし同時に、個々の実装においては、よりよい方法があることに気づくこともあります。 普段からあなた自身の個人的な興味とニーズを深く追っておくことで、アプリケーションを構築する際にそのテクニックを使うことが適切であるかどうかを判断できるよう準備しておくことがプログラマーとして賢明であると言えます。 本書は関数型プログラミングの本ですが、同時に、何にもまして、問題とその解決方法を理解する力とそこで使える引き出しを持っているということが、その場その場でとるべき最善のソリューションにつながるものであると信じています。 とはいいつつ、オブジェクト指向スタイルと関数型スタイルの違いに触れながら、JavaScript を使って関数型プログラミングの美徳を熱く説いています(笑)。 初版が...

Python で W3C PROV オントロジーを可視化する(Python PROV)

イメージ
本記事では Python の prov パッケージを利用して、PROV 情報を可視化する方法を見ていきます。 【目次】 [1]はじめに [2]Prov Python package の利用 (1)Prov Python package のインストール (2)PROV-N の概要 (3)Python で PROV 情報を作成する [3]可視化してみる (1)Graphviz、pydot のインストール (2)図(画像)をPNG ファイルとして出力する (3)属性の追加と日本語表示 [4]RDFファイルを読み込んで可視化する (1)PROV 情報を RDF ファイルとして保存する (2)RDFファイルから読み込んで可視化する [1]はじめに W3C PROV オントロジーを利用すると、物事の来歴情報を記述することができます。 PROV 仕様は来歴表現に関するデータモデルやシリアライズフォーマットが定義されていますので、機械可読な来歴情報を表現できます。 PROV-Overview An Overview of the PROV Family of Documents https://www.w3.org/TR/prov-overview/ ただし、一般に、形式的な表現のままでは人間が理解しやすいとは限りません。 これは PROV の仕様が複雑という意味ではなく、人間は、情報量が多くなると全体像を把握しづらくなるということかと思います。 これに対して PROV の表現を可視化(図示)するための推奨事項が公開されています。 PROV Graph Layout Conventions https://www.w3.org/2011/prov/wiki/Diagrams このような PROV 情報の可視化を行えば、全体像を把握しやすくなると思います。 前回の記事『 Git2PROV を例に W3C PROV オントロジー表現の基本を知る 』では、Git のコミット履歴に関する PROV 表現例を図を中心に概観しました。 簡単な来歴の図は手作業で書くこともできますが(前回の記事は手作業で書きました)、データが複雑になると手作業で書くのは無理です。 これは作図作業に時間がかかる、というだけでなく、誤りのもとになります。 そこで本記...

Git2PROV を例に W3C PROV オントロジー表現の基本を知る

イメージ
本記事では、W3Cが勧告している PROV オントロジーの表現方法を Git2PROV ツールを例にみていきます。 【目次】 [1]はじめに [2]PROV とは (1)PROVの基本概念 (2)簡単な補足 (3)PROV のシリアライズ形式 (4)PROV グラフの可視化について (5)拡張仕様について [3]Git のコミット履歴を PROV で表現する (1)Git2PROV (2)ファイルのバージョン1をコミットしたとき (3)ファイルのバージョン2をコミットしたとき (4)より詳細な Git のモデルや応用など [4]Git2PROVを実際に動かしてみる (1)インストール (2)ローカルサーバで実行 (3)コマンドラインから実行 [1]はじめに ネットで様々な情報が簡単かつ大量に得られるようになりました。 それはそれで良いのですが、同時に得られた情報が信用できる情報かどうかの判断も難しくなってきました。 昨今の生成系 AI などの事情を考えると、この傾向はますます進むような気がしますが、そもそも今まで何を根拠に「信頼」とか「信用」していたのか?と考えていくと、意外に根拠が薄そうな気がして、少々不安になります(笑)。 それはともかく、信用できる情報かどうかの判断基準として、データの来歴あるいは起源をみることは多いと思います。 W3C は、このような来歴あるいは起源を記述するための仕様である PROV を2013年に勧告しています。 PROV-Overview An Overview of the PROV Family of Documents https://www.w3.org/TR/prov-overview/ 崇高な概念をここで語ることはできませんが、来歴や起源をたどれるデータの表現方法は、一般のアプリ作成においても役立つことが多いと思いますので、本記事では、この PROV による情報の来歴あるいは起源に関する表現をみてみます。 ところで PROV 仕様をざっと概観するには、(英語ですが)以下のドキュメントが最適だと思います。 PROV Model Primer https://www.w3.org/TR/prov-primer/ 一方、本記事では開発者にとって身近な Git のコミット情報を PRO...

システム構築技術を俯瞰する(マイクロサービスアーキテクチャ 第2版)

イメージ
マイクロサービスアーキテクチャ 第2版 Sam Newman (著), 佐藤 直生 (監修), 木下 哲也 (翻訳) 発売日:2022/12/2 マイクロサービスアーキテクチャ 第2版 単行本 (Amazonで書籍情報を表示) 前回、前々回と文字コード関係の本が続きましたが、今回はシステム構築系の本です。 私はマイクロサービスアーキテクチャの初版を読んでいたのですが、ある調べものがあって読み返したことがきっかけで、新しい版が無いか探してみると、出てました(笑)。 この本の主題はマイクロサービスですが、初版の時から、マイクロサービスに特化した技術本というよりは、システム構築技術に関するカタログ本のような内容です。 このため、マイクロサービスに興味は無くても、システム構築に関わる人には有意な情報が書かれている本だと思います。 初版でも300ページくらいあるボリュームでしたが、第2版は最近の状況を反映して、その倍の600ページのボリュームになっています。 第2版も買ってよかったなと思える内容でしたので、書き留めておくことにしました。 <本の内容> 下記の目次を見ても分かる通り、この本は、設計から実装技術、セキュリティ、運用監視、組織のあり方まで、マイクロサービスに関連する話題をとても幅広く取り上げています。 【目次】 はじめに 第Ⅰ部 基礎 1章 マイクロサービスとは 1.1 マイクロサービスの概要 1.2 マイクロサービスの重要な概念 1.3 モノリス 1.4 実現技術 1.5 マイクロサービスの利点 1.6 マイクロサービスの課題 1.7 マイクロサービスを使うべきか 1.8 まとめ 2章 マイクロサービスのモデル化 2.1 MusicCorpの紹介 2.2 適切なマイクロサービス境界にするには 2.3 結合の種類 2.4 過不足のないドメイン駆動設計(DDD) 2.5 マイクロサービス向けのドメイン駆動設計(DDD)の例 2.6 ビジネスドメイン境界の代替手段 2.7 混合モデルと例外 2.8 まとめ 3章 モノリスの分割 3.1 目標を持つ 3.2 漸進的な移行 3.3 ほとんどの場合、モノリスは敵ではない 3.4 まず何を分割すべきか 3.5 階層による分解 3.6 便利な分解パターン 3.7 データ分解における懸...

Python でグラフデータベース(AuraDB, Docker版Neo4j)を使ってみる

イメージ
本記事では Neo4j、AuraDB を試す環境を準備して Python の簡単なプログラムを動かしてみます。 【目次】 [1]はじめに [2]AuraDB を無料で使ってみる [3]ローカル環境の Docker で Neo4j を使ってみる (1)使い捨て的な利用例 (2)データを永続化して利用する [4]アプリ(Python)から AuraDB / Neo4j にアクセスしてみる (1)サンプルデータ (2)Python で Cypher クエリを実行してみる [1]はじめに 前の記事『 プロパティグラフ(Neo4j / AuraDB他)の概要を知る:グラフデータベース 』で、プロパティグラフをモデルとするグラフデータベースの本を紹介しました。 本記事では実際に Neo4j、AuraDB を試す環境を作って、簡単なプログラムを動かしてみます。 今回は環境構築作業の負担が極力無い方法として AuraDB と Docker 版 Neo4j を取り上げます。 AuraDB は 登録すれば無料で使える Neo4j のクラウドホスティングです。例えば Google Colaboratory でプログラムを書いて AuraDB を使うことができます。 一方、Neo4j の Docker イメージも提供されていますので、ローカル環境で動作させることもできます。 AuraDB も Docker 版 Neo4j も接続設定を変えるだけで同じプログラムが動きます(動くはず)ので、例えば、ローカル環境でテストして本番にAuraDBを利用することもできます。 AuraDB と Neo4j は基本的には汎用データベースエンジンですが、可視化ツールなど面白そうなツールも組み込まれていて、使ってみると楽しいです。 [2]AuraDB を無料で使ってみる 実際の Neo4j データベースに触れる最も手軽な方法は AuraDB を使う事だと思います。 Fully Managed Graph Database Service | Neo4j AuraDB https://neo4j.com/cloud/platform/aura-graph-database/ AuraDB は Neo4j のフルマネージドなクラウドサービスでいくつかプランがありま...