# 実績と貢献
2013年当時、Kubernetes(K8s)はまだ存在していなかったため、その必要性を感じ、PaaSを提案し開発を開始しました。その後、10年以上にわたり運営してまいりました。主な実績は以下の通りです。
## 主な実績
- プロジェクトの提案と立ち上げ
- ゼロからのシステム設計
- 管理者向けページの開発
- 約10年分の開発業務(主にバックエンド)
- ハードウェアチューニング
- ロードバランサ(Load Balancer)のチューニング
- 海外向けのアプリ開発(Android)およびネットワークテスト
- GSLBの設定
- データベースおよびツールの運用(RIAK (DynamoDB), MySQL, ElasticSearch, Prometheus, Grafana など)
- コスト削減対応
- 社内共通Kubernetes(K8s)への移行サポート(10年後)
また、さまざまなチームのお手伝いも行い、それぞれの技術スタックや作業スタイルに合わせて対応しました。さらに、研究型のプロジェクトにも多数携わってきました。
私はバックエンドに強みを持つゼネラリストであり、企業の基盤となるシステムの構築に自信を持っています。
---
## 具体的な実績
PaaSのProof Of Conceptでは、最も効果的なロードバランサ(Haproxy)の自動生成に取り組みました。使用した技術は以下の通りです。
- **Bash**(コード) + **Git**(ストレージ) + **Haproxy**
Haproxyを選んだ理由は以下の通りです:
- 高いパフォーマンス
- 優れたドキュメンテーション
- 制限されている機能範囲
チームが関心を示した後、次の段階に進みました。当時の研究や資料を参考に、最終的にK8sやAWSに類似したシステムを作成しました。ただし、分散システムのストレージには、etcdのようなCPシステムではなく、**RIAK(AP)**の使用を選択しました。それに伴い、データ管理にはCRDT(Conflict-free Replicated Data Type)に似た手法を用いました。
このシステムは初期段階で**IaC(Infrastructure as Code)**および**PaC(Platform as Code)**を実現しており、設定ファイルはk8sのYAMLファイルのように、ドキュメントで示していました。オーケストレーションエンジンが具体的な設定ファイルに変換し、サービスごとにコードとして展開されました。
コンテナ管理はDockerに任せ、シンプルなシステムを維持しました。特にSDNは使用せず、Haproxyでポートバインディングを行いました。後にCalicoとの連携を検討しましたが、最終的にはその必要はありませんでした。
各コンテナには、**Rust**で開発したエージェントが実装され、ノードごとの**Clojure**コントローラと連携してターゲットステートを達成しました。当初、コンテナエージェントはClojureで作成されていましたが、コンテナの数が増えるとメモリコストが大きくなり、Rustに移行しました。エージェントとノード間の連携には**Cap'n'Proto**を使用しました。フロントエンドは**Clojurescript**と**React**で開発しました。
その後、インターンとして参加していたメンバーが社員としてフロントエンド開発を担当してくれ、APIゲートウェイを作成し、APIを通じて設定変更が行われるようになりました(使用技術:Java, Kotlin, Spring Boot, JavaScript)。
---
## その他の貢献
- **Gotty**(Go系のttyプロジェクト)への[PR](https://github.com/yudai/gotty/pull/67/files)提出:クライアント証明書サポートを追加し、フロントからコンテナへのTTY接続を可能にしました。
- Haproxyの接続管理を**LUA**スクリプトでカスタマイズ。
- 社内システムと**Logstash**の連携用の**Ruby**スクリプト作成。
- 新メンバーと共に、デプロイ用の**Chef**および**Ruby**スクリプト作成。その後の**Ansible**スクリプトのサポートも行いました。
- イメージ標準を設定し、RIAKのTLS系問題を解決するために**Erlang**でのlive開発。
- 海外でのネットワークテストおよびリクルーティング活動を行い、**Android**アプリを作成しました(Android開発経験あり、Androidカーネルのカスタマイズも経験)。
最近はアップデートしていませんが、私のブログにはこの時代のさまざまなノートがあります。
[こちらからご覧いただけます](https://www.johangall.com/ops/)。
今後、ブログの再開を考えております。
---
## チーム体制
長い間は1−2人で開発してましたが最終的に、チームは以下のメンバーで構成されました:
- **私**(バックエンドおよびテックリード)
- **Aさん**(インフラ担当)
- **Bさん**(フロントエンド担当)
- **Cさん**(マネージャー)
私は新人のオンボーディングも担当しました。
また、いくつかのタスクフォースにも参加し、以下の取り組みを行いました:
- コードクオリティの強化
- **SRE**(Site Reliability Engineering)
- パフォーマンステスト
- 外部企業との連携および廃止・更新ポリシーの策定
---
このように、さまざまな領域での経験を活かし、システムの設計、開発、運用において多岐にわたる貢献を行ってまいりました。