プログラミング初心者がアーキテクトっぽく語る

見苦しい記事も多数あるとは思いますが訂正しつつブログと共に成長していければと思います

2020-08-01から1ヶ月間の記事一覧

Git MergeでConflictが発生したときの対処

Git

異なるブランチで同じファイルの同じ場所を同時に編集するとConflictが発生する。 Conflictが発生した状態でMergeしようとすると失敗する。 $ git merge feature -m "merge feature branch into master" Auto-merging hello.py CONFLICT (content): Merge co…

機能要件と非機能要件の判別

要件は機能要件と非機能要件に分類される。 ある要件が機能要件なのか非機能要件なのかどのように判別すればよいだろう? ある要件を見たときそれが機能要件と非機能要件か判断できないことが初学者にはよくある。 現実の話をすると現場でそんなことで悩むこ…

非機能要件を定義するためのツール

非機能要件が多すぎるシステムは得られる効果以上に開発に時間がかかり高コストになる。 非機能要件が少なすぎるシステムは品質や運用性が低下し、技術的負債を抱えた状態でリリースされることになる。技術的負債は積み重なることはあっても精算されることは…

SOAとMicroserviceアーキテクチャ

SOAとMicroserviceの違いについて調べると様々な答えが出てくる。 「ESBとSOAPとWSDLを使うのがSOAだ」 「サービスの粒度が大きいがSOAで小さいのがMicroserviceだ」 「MicroserviceはSOAだ」 これは話し手の視点が異なることが原因だ。人によって「SOA」の…

API Gateway

API Gawewayという言葉をよく目にするようになった。 アーキテクチャ議論でよく出てくるのでなにを指しているのか理解しておきたい。 API Gatewayなしの場合 クライアントは「発注」という処理のために複数のサービスをREST APIで呼び出す 各サービスはTLS、…

APIキーを管理するCloudサービス

API

Web APIにおけるキーの管理について以下の記事で述べた。 architecting.hateblo.jp この中でAPIキーを管理するCloudサービスについて名前だけ紹介したが中身までは触れなかった。 ここでは著名なサービスをいくつか取り上げて簡単に説明する。どんなサービス…

ETagの利用例

API

主にHTTPのキャッシュなどで利用されるETagには複数のユースケースが存在する。 今回はETagのユースケースについて見ていこう。 ETag ETagヘッダはRFC 7232(HTTP/1.1 Conditional Requests)で定義されているレスポンスヘッダである。 ETagの値はあるリソー…

DIとDIPとIoC

Dependency Injectionパターン:DI Dependency Inversion Principle:DIP Inversion of Control:IoC この3つの用語はなんとなく名前が被っている上に同じ文脈で登場することが多いため、初学者は混乱しやすい。 なにが違うのか、Dependency Injectionパター…

KubernetesのServiceの種類

KubernetesのServiceの種類については以前、名前だけ紹介した。 architecting.hateblo.jp ここではそれぞれの概要について触れる。 ClusterIP クラスタ内でPod同士が通信するためのService 名前解決を利用できる デフォルト NodePort 簡易的な外部との接続を…

Istioとはなにか

以前、サービスメッシュがなぜ必要なのかをこちらの記事で紹介した。 architecting.hateblo.jp 今回はサービスメッシュの実装の一つであるIstioについて取り上げる。 サービスメッシュは執筆時点ではまだ新しい技術であり変化が激しい。実装間の差も大きく、…

NoSQLデータベースの種類

以前、データベースの大半はRDBMSと言われているが、NoSQLデータベースを適材適所に配置する流れは続いている。NoSQLの種類とそれぞれの特徴、そして代表的な実装を知っておくことは重要である。 ここでは代表的なNoSQLデータベースを紹介する。 Key-Value D…

その他のKubernetesの重要なオブジェクト

「Kubernetesの基礎」ではPodとServiceについて触れたがそれ以外のオブジェクトについては紙面の都合上触れることができなかった。 architecting.hateblo.jp ここでは前回、書ききれなかったKubernetesの重要なオブジェクトを紹介する。 Deployment Podの上…

Kubernetesの設定

Kubernetes(k8s)には複数の設定方法がある。 今回はKubernetesの設定方法について紹介する。 設定方法 k8sがサポートする設定方法を以下に示す。 kubectlコマンドで手続き的に設定する kubectl run/scale/expose Manifestファイルを手続き的に設定する kub…

Kubernetesの基礎

今のご時世はなんでもコンテナだ。そしてコンテナでサービスを提供するにはKubernetes(以下、k8s)が必要だ。 architecting.hateblo.jp 今回はk8sの概要について見ていこう。 歴史 Googleで前身となるBorgが開発された Borgの開発者を中心にGoogleでk8sの開…

なぜKubernetesを使うのか

今のご時世はなんでもコンテナだ。少なくとも会社の偉い人たちはそう思っている。 コンテナと言えばDockerだ。Dockerがあればコンテナに関わることは一通りできる。 しかし「Kubernetes」という単語もよく耳にする。Dockerで十分ではないのだろうか? 今回は…

Dockerのネットワークのタイプ

Dockerでコンテナ同士が通信するためにはネットワークが必要だ。 Dockerは複数のネットワーク接続方式をネットワークドライバというPluggableな形式でサポートしている。 ここではDockerが提供するネットワークについて見ていこう。 Default Bridge Dockerは…

RUN、ENTRYPOINT、CMDのexec表記とshell表記

前回、dockerfileのENTRYPOINTとCMDについて紹介した。 architecting.hateblo.jp RUN、ENTRYPOINT、CMDにはexec表記とshell表記の2つの記法がある。 以降、CMDを例にして2つの記法について見ていく。 shell表記 shell表記で記述した例を示す。 CMD echo hi s…

dockerfileのENTRYPOINTとCMD

dockerfileのENTRYPOINTとCMDは、どちらもコンテナで実行するプロセスを指定するInstructionだ。 それぞれ単独で利用することも、組み合わせて利用することもできる。 どのように違うのか、どのように組み合わせることができるのか見ていこう。 CMD まずCMD…

「docker run -it」にするとコンテナがすぐに終了しない理由

Dockerを使ったことがある人ならこんなことを経験したことがあるかもしれない。 このように実行するとコンテナがすぐに終了してまう。 docker run ubuntu:latest このように「-it」を付けて実行するとコンテナは終了しない。 docker run -it ubuntu:latest …

Twelve-Factor App

Twelve-Factor Appはモダンなアプリケーションの開発、Deploy、Scaleを成功させるための12のBest Practiceである。 2012年にHerokuのAdam Wiggins氏が発表し、https://12factor.net/にて公開されている。 Twelve-Factor Appはマイクロサービスを前提としてお…

Puppetの基礎

Configuration Management Toolと言えばAnsibleが持て囃されている。 少し適用範囲が狭いことがネックだが実はPuppetも優れたツールだ。Ansibleよりも宣言的な使い方ができる点に特徴がある。宣言的なインフラ管理を志向する人、既にAnsibleを使っているが他…

Container Firewall

Kubernetes(以下、k8s)にHostingするマイクロサービスでは「Container Firewall」が注目されてきている。 「Container Firewall」とはなにか?いままでのFirewallとはなにが違うのだろうか? 従来のZone based Security 従来のセキュリティ対策はネットワ…

サービスメッシュとは

KubernetesにHostingされたマイクロサービスでは「サービスメッシュ」がよく使われている。 「サービスメッシュ」はサービス間の通信を制御するコンポーネントだ。しかしサービス間で通信する機能は既にそれぞれのサービスの中で実装されている。なぜサービ…

TLS

API

背景 HTTPSは以前は暗号化にSSLを利用していた 現在はTLSを利用している 今でもSSLとTLSを指して「SSL」と呼ぶことがある TLSはRFC 8446(The Transport Layer Security (TLS) Protocol Version 1.3)で規定されている RFC 8446の規定は結構緩いがTLS_RSA_WI…

Public Key Infrastructureについて

API

Web API開発においては認証や暗号化のために証明書を利用することは多い。 こういうコードと関係ない部分はセキュリティ担当のインフラ屋さんに丸投げしたくなる気持ちはわかる。 しかしつまらないところではまって時間を無駄にしないよう最低限の知識は身に…

APIキーの保管

API

Web APIを叩くにはAPIキー、シークレット、Credentialが必要だ。 こういった情報をどのように管理すべきだろうか。 ハードコードすると変更するのが大変だ。ソフトコードすると少し変更しやすくなるがそれでもビルドが必要になってしまう。それにソフトコー…

Web APIで発生するエラーの対処

API

エラーが発生しないシステムは存在しない。回復できるエラーからは回復し、回復できないエラーからは適切な情報を残して終了することがシステムには求められる。 Web APIも同様だ。サーバ内でエラーが発生することもある。ネットワーク障害の影響を受けるこ…

Web APIのデータ圧縮

API

Web APIの性能を最適化する方法としてPagination、キャッシング、圧縮がある。今回は圧縮についてを取り上げる。 既に取り上げたPaginationとキャッシュについてはこちらを参照いただきたい。 architecting.hateblo.jp architecting.hateblo.jp メリット 通…

Web APIのキャッシュ

API

Web APIの性能を最適化する方法としてPagination、キャッシング、圧縮がある。 今回はキャッシングについてを取り上げる。 既に取り上げたPaginationについてはこちらを参照いただきたい。 architecting.hateblo.jp メリット 応答速度が上がる。 サーバの負…

Web APIのPagination

API

Web APIは元来、軽量なAPIだ。 しかしデータサイズが大きくなれば重くなる。応答速度が極めて重要な場面もあるかもしれない。 そんなとき、Web APIの性能を最適化する方法として利用できるのがPagination、キャッシング、圧縮である。 今回はPaginationにつ…