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

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

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につ…

Dependency Injectionパターン

設計においてクラス間の独立性を高めることは重要である。 クラス間の独立性を高める方式の1つにDependency Injectionパターンがある。今回はDependency Injectionパターンについて説明する。 概要 日本語には「依存性注入」と訳される。この言葉からDIがど…

モジュール性の高い設計

以前、「コードの構造化」というタイトルでソフトウェアのモジュール化について述べた。 このときは初学者にもついていけるよう、「コードの分割」、「コードの結合」、「コードのグループ化」、「システムに組み上げる」という4つステップに分けてボトムア…

Mapの繰り返し処理基本3パターン

拡張for文を用いたListの繰り返し処理は初学者でも覚えやすいですね。 for (String item : list) { System.out.println(item); } 一方でMapの繰り返し処理が分かりづくてMapを避ける初学者がいます。 Mapはとても便利なので避けてよいことはありません。基本…

JavaでLogging

「素人コードにこれをパパッと加えればたちまちお店の味に」というソフトウェア業界の「味の素」がLoggerだと思います。Loggerは加えておいて損はありません。 逆に素人感満載になるのが「System.out.println」です。使い所次第ですが、多くの場合はBad Prac…

Basic認証、Digest認証、Bearer認証、OAuth認証方式について

API

Basic認証、Digest認証、Bearer認証、OAuth認証方式はRFCで標準化されている認証方式の中で最もよく目にする方式だろう。 Basic認証とDigest認証は多くのサーバ、クライントで実装されており導入障壁が低い認証方式だ。 機密性の高いデータを扱うサービスで…

Web API認証方式のパターン

API

Web API認証の混沌 混沌を整理する 認証とはなにか 1. 標準化されたHTTP認証方式 2. APIキー認証 3. Form認証、アクセストークン認証 Web API認証の混沌 認証に成功しないとWeb APIを叩くことはできない。まずは認証である。 認証方法がWebサービスによって…