Anarchy In the 1K

2020-01-01から1年間の記事一覧

Spring BatchでPartitioningを用いて処理の多重化

背景 Spring Batchのパフォーマンスの改善の為に、Partitioningを用いた処理の多重化を検討することになりました。今回の記事では、実際に動くものを元に解説を行います。 目次 背景 目次 解説 概説 詳説 設定 コード slaveステップで呼び出すTasklet Partit…

Docerを用いてコマンドラインだけでKafka入門

目次 目次 背景 ハンズオン Kafka起動 動作確認 トピック作成 コンシューマ起動 プロデューサ起動 オフセットの状態確認 背景 必要に迫られて、Kafkaの勉強をはじめました。今回はDockerを用いて環境を速攻で構築します。 ハンズオン Kafka起動 docker-compo…

CommandLineJobRunnerを用いたSpring Batchの実行

目次 目次 背景 ハンズオン 事前準備 DBの用意 プロジェクトの作成 コーディング 設定ファイル Spring Batchの設定 ジョブ個別の設定 Javaソース ファイル 実行 背景 前回こちらの記事でSpring Boot Batchを用いたバッチ実行を行いました。今回は、コマンド…

Spring Boot Batchの実行とメタデータテーブル

目次 目次 背景 ハンズオン 事前準備 プロジェクトの作成 DBの用意 コーディング Tasklet JavaConfig エントリポイント 設定ファイル 実行 1回目 実行前のDB アプリケーションの実行 実行後のDB 2回目 アプリケーションの実行 実行後のDB 背景 必要に迫られS…

ストリーミングレプリケーションをDocker上で

背景 [改訂新版]内部構造から学ぶPostgreSQL 設計・運用計画の鉄則 Software Design plus作者:勝俣 智成,佐伯 昌樹,原田 登志発売日: 2018/09/14メディア: Kindle版 上記書籍を読んでPostgreSQLについてお勉強をしています。そんな中、ストリーミングレプ…

Docerを用いてPostgreSQL環境を速攻構築

背景 ひょんなことから、仕事でPostgreSQLを使うことになった為、Dockerを用いてぱっと触れる実験環境の構築手順をメモしておきます。 ハンズオン 起動(ホスト上) $ docker run --name postgres --rm -e POSTGRES_PASSWORD=password -p 5432:5432 postgres …

DBのトランザクション分離レベル

DB

目次 目次 トランザクション分離レベルとは トランザクションが相互に影響を与える事象 値の更新時 レコードの追加時 トランザクション分離レベルの一覧 トランザクション分離レベルとは DBにおいて、複数のトランザクションが同時に実行された際に、相互に…

I/O処理の分類まとめ

I/O処理の分類 "I/O処理準備中の振る舞い"と" I/O処理完了の連携方法"の組み合わせにより、以下の通り分類されます。 "I/O処理準備中の振る舞い" カーネルがI/O処理の準備中*1だった際の、アプリケーションの振る舞いで、以下の通り分かれます。 ブロッキン…

Java NIOを用てスケーラブルI/Oを実現する

目次 目次 背景 ノンブロッキングI/Oの実装方法 NIOとストリームI/Oの比較 Bufferクラス 概要 主な属性 主な操作 I/Oの多重化の実装方法 利用するクラス一覧 SelectableChannelをSelectorに登録する方法 背景 先日、こちら記事でスケーラブルI/Oの実現方法を…

NginxでHTTPS対応のフォワードプロキシを構築

今回の記事の構成は、以下の通りです。構築方法は、「ハンズオン」に記載しています。 背景 調査結果 CONNECTとはなにか CONNECTメソッドを用いたHTTPS通信の流れ そもそも、なぜCONNECTメソッドが必要か エラー原因 ハンズオン 概要 手順 Nginxのソースコー…

CircleCIでタグ発行を契機にサーバへデプロイ

やりたいこと 先日、以下の記事でCircleCIの導入を行いました。今回は、バージョン番号のタグ発行を契機とした、サーバへのデプロイを自動化します。 CircleCIの調査 - Anarchy In the 1K 事前準備 SSH SSHキーの作成 CircleCIがサーバに接続する為のSSHキー…

CircleCIの導入

CircleCIとは GitHub上のリポジトリの更新を契機として、処理実行が可能なCI/CDサービスです。リポジトリ上のに配置した.circleci/config.ymlに則り、CircleCIが処理を行います。CircleCIの概要に関しては、合わせて以下もご覧下さい。 継続的インテグレーシ…

Gradleでマルチプロジェクト

マルチプロジェクトについて マルチプロジェクトとは 複数の子プロジェクトを内部に保持するプロジェクトのことを指します。マルチプロジェクトを用いることで、1つのプロジェクトを更に細かい粒度で分割することが可能になります。 マルチプロジェクトの使…

ThreadPoolExecutorの調査

背景 Javaでスレッドプールを扱う際に、いつもお世話になっているThreadPoolExecutorに関して、ExecutorsクラスのnewXyzThreadPoolメソッドを用いて生成するだけで、その中身を意識したことはありませんでした。今回はそのThreadPoolExecutor関して、調べた…

Javaにおけるスレッドの状態待ち

背景 マルチスレッドの処理において、排他制御の為にロックを取得し、期待する状態を待って後続処理を続行する。この様なよくある処理に関して、詳細を以下にまとめます。 実装例 早速ですが、スレッドの状態待ちにの実装例です。概要は以下の通りです。 rea…

スケーラブルI/O実現方法の調査

背景 スケーラブルなI/Oに関して、以下書籍で勉強しています。 Javaネットワークプログラミングの真髄作者:エズモンド・ピット発売日: 2007/04/28メディア: 大型本 スケーラブルなI/Oの実現方法に関して、こちらでは以下の通り記載があります*1。 I/Oのノン…

Clean Architectureの内容を元に原則の分類

背景 プログラミングを行う中でいくつか原則を学ぶ機会があったのですが、正直多すぎて覚えられない。 一度体系的にまとめて整理しないとダメだなと思っていたら、以下の内容が求めていたものだった為、備忘も兼ねてメモしておきます。 Clean Architecture …

MyBatis Dynamic SQLを使ってみた。

背景 Java + MyBatisを使って開発を行っているのですが、コード上でSQLの組み立てを行う方法が無いか調べたところ、MyBatis Dynamic SQLを使うと実現できる様です。 以下のQuick Startを元に試してみたので、ここではその際のメモを残そうと思います。 MyBat…