タグ

ブックマーク / deeeet.com (48)

  • Team Topologiesを読んだ

    https://teamtopologies.com/ DevOps consultantとして技術と組織の両面からDevOpsの支援を行なってるMatthew SkeltonとManuel Paisによる.Consultantは大体中身が薄く感じることが多くなり手に取ることは少なくなってきたが,各所で見かけたり,2人によるDevOpsにおけるチームのあり方のパターンをまとめたWhat Team Structure is Right for DevOps to Flourish?が良かったので読んでみた. 書はDevOpsの視点から高速なDeliveryを実現するためにどのようなチームや組織を作るべきかについてまとめている.個人ではなくチームをDeliveryの最も重要な単位と考え(Team first-thinking),チームが最大限にパフォーマンスを発揮するために,チームの人数

  • Move Fast: How Facebook Builds Softwareを読んだ

    Software Engineering DailyのJeff Meyersonが書いた Move Fast: How Facebook Builds Software を読んだ.というかJeff Meyerson人によって録音されたAudiobookが公開されているのでそちらで聴いた.Podcastホストをやっていることもあり音声はとても聴きやすく長さも3時間くらい (紙のだと123ページ) でさっと聴くことができた. 内容としてはFacebookのエンジニア組織について「Product」と「Culture」「Technology」という観点からCase study的に様々な話がまとめられている.「Product」ではWebからMobileへのシフトの話やGoogle+が出てきた時の話が,「Culture」ではマネージメントやBootcampと呼ばれるオンボーディングプログラムつい

  • Waypointとは何か

    Hashicorpの2020年冬の新作 Waypoint (リリースブログ)に関してドキュメントなどをざっと眺めてみたので最初の印象をちょっと書いてみる.ちゃんとしたレビューは @copyconstruct の記事 Waypoint とか読むのが良い.毎度のことながらドキュメントやガイドはかなりちゃんとしたのがあるので使い方とかはそっちを読んだ方がいい.以下に書くのはざっくりした個人の感想(ちなみにもう一つのBoundaryに関してはZero Touch Productionとは何か に軽く書いた). What is Waypoint Waypointは,KubernetesやNomad,Amazon ECS,Google Cloud RunといったPlatformの上にBuild,DeployとReleaseの一貫したWorkflowを実現するツール.使ってる言語やそのパッケージ方法や,

  • Zero Touch Productionとは何か

    GoogleのSREとSecurityによるBuilding Secure Reliable Systems というの中で「Zero Touch Production (ZTP) 」という考え方が紹介されていた.これはインフラの権限管理やインフラの構築そのものの指針となる概念であり,自分がそうあるべきだとずっと思ってきた考え方でもある.これはどのような考え方なのか?をこれまでの歴史を踏まえて具体的なツールや事例とともにまとめておく. Zero Touch Production Building Secure Reliable Systems においてZero Touch Production (ZTP) は以下のように定義されている. The SRE organization at Google is working to build upon the concept of least

  • 社内PlatformチームのProduct Management

    現職においてPlatform チーム(社内基盤チーム)として働き始めて2年近くがたった.このチームにおいて自分はTech Leadをメインに努めてきたが,同時にPlatformの「どのような機能を」「どのような優先度で」作るか? を決めるProduct Manager的な役割も果たしてきた(ちなみにTech Leadに関してはメルカリのテックリードが学んだ、HowよりWhyを重視することが大切なわけ で少し話した).これは何度も失敗しながら悪戦苦闘しつつやってきたが自分たちなりのフレームワークをつくり実際に回すことができている. 未だに試行錯誤しているのでここで書いていることが正解だとは思っていないが,今後同じようにPlatformチーム的なことを始めるひとに向けて現状自分たちがどのようにやっているのかについて簡単にまとめておく(他の会社がどのようにやってるのかも聞きたいのでもし同じような

  • Competing With Unicornsを読んだ

    Competing with Unicorns: How the World’s Best Companies Ship Software and Work Differently The Agile Samuraiの作者でありSpotifyにおいてAgile CoachとEngineerを努めたJonathan Rasmussonによる書はUnicornもしくはTech companyがどのようにチームをつくり,組織をスケールさせ,文化を作っているのかについて書いている.タイトルにUnicornとあり複数の企業を扱ってるように見えるが,基的には作者のSpotifyにおける体験が基になっておりSpotifyの話が中心になっている. なぜMicroservicesか?ではMicroservicesの最終ゴールは組織にあると書いた.これは共通の見解(のはず)である一方で,Microse

  • 今年読んだ技術書籍(2019年)

    今年読んだ技術書籍やレポートなどをざっくりまとめてる.Infrastructure Engineer・Platfomerとして日々の業務に直結するものから1年くらいかけてやっていきたいと思っていることなどを中心に. Kubernetes 業務ではメインにKubernetesを使っているのでKubernetesに関わる書籍は発売されれば大体目を通すようにしている. 今年発売されたので良かったのはProgramming Kubernetes.このはCRDやOperatorによってKubernetes nativeなアプリケーションを構築することにフォーカスしている.昨年のJapanContainerDaysでのMicroservices Platform on Kubernetes at Mercariでも話したようにKubernetesを使う大きな理由の1つはその拡張性にある.Kubebu

  • なぜMicroservicesか?

    現職においてMonolithアーキテクチャからMicroservicesアーキテクチャへの移行とその基盤の構築に関わって2年近くが経った.未だ道半ばであるがこれまでの経験や日々のインプットをもとにいろいろ書いておこうという気持ちになった.記事ではそもそもMicroservicesアーキテクチャとは何かを整理し,なぜやるべきか?・なぜ避けるべきかを整理する. Microservices? Microservicesアーキテクチャとは「Single purpose,High cohesion,そしてLoosly Couploedなサービスを組み合わせてシステムを構築する」アーキテクチャ手法である.それぞれの原則をまとめると以下のようになる. Single purpose: 一つのことに集中しておりそれをうまくやること Loose coupling: サービスは依存するサービスについて最小限の

  • GithubのGo言語プロジェクトにPull Requestを送るときのimport問題

    TL;DR fork元(オリジナル)をgo getしてその中で作業,forkした自分のレポジトリにpushしてPull Requestを送る. 問題 Github上のGo言語のプロジェクトにコミットするとき,cloneの仕方で若干ハマることがある.普通のOSSプロジェクトの場合は,forkしてそれをcloneしてpush,Pull Requestとすればよい.Go言語のプロジェクトでは,同じレポジトリの中でパッケージを分け,それをimportして使ってるものがある.そういう場合にforkしたものをそのままcloneすると,importの参照先がfork元の名前になりハマる. 例えば,github.com/someone/toolがあるとする.このレポジトリはgithub.com/someone/tool/utilsという別パッケージを持っており,mainがそれを使っているとする.つまり以下

  • "Microservices"を読んだ

    James Lewis氏とMartin Fowler氏による“Microservices”を読んだ.以前ざっと目を通したが,最近よく耳にするようになったのでちゃんと読んだ.以下はそのメモ. 概要 “Microservices” とはソフトウェアシステムの開発スタイルである 近年このスタイルでの開発を見てきて良い結果が出ている 初出は2012年の3月の“Micro services - Java, the Unix Way” Microserviceは一連の小さなサービスで1つのアプリケーションを開発する手法 それぞれのサービスは自身のプロセスで動いており,軽量な機構(e.g., HTTP API)を通じて情報をやりとりする これらのサービスは独立して自動デプロイされる 一枚岩として構築されるMonolithicスタイルのアプリケーションと比較すると分かりやすい 一般的なエンタープライズのア

  • SREとしてMercariに入社した | SOTA

    1月16日よりMercariにてSRE/BSE(Backend System Engineer)として働いてる. これまではとある会社で社内向けのPaaSエンジニアとして働いてきた(ref. PaaSエンジニアになった).PaaSの目標である「アプリケーション開発者の効率を最大化」を突き詰めながら少人数のチームでいかにScalableなプラットフォームを構築するかに注力してきた.Cloud FoundryやDockerといったインフラの最前線とも言える技術やアーキテクチャに触れ,かつその中で自分の技術的な柱である自動化に取り組むことができたのは非常に刺激的で自分に大きなプラスになった. その一方でPaaSというプラットフォームはその性質上サービスそのものからは中立的になることが避けられない(だからこそScalabilityを実現できるのだが).よりサービスに近い部分,サービスの成長に直結す

  • Writing An Interpreter In Goを読んだ

    Thorsten Ballによる“Writing An Interpreter In Go”を読んだ. 技術界隈のブログを見ているとたまにSteve Yeggeの「If you don’t know how compilers work, then you don’t know how computers work」という言葉に出会う.その度に学生のときにコンパイラの授業を受けなかったこと後悔し,社会人になって挑戦しようとして挫折したことを思い出して悲しい気持ちになる.@rui314さんのCコンパイラをスクラッチから開発してみたを読んではかっこいいなと思いつつ僕には無理だなあと心が折れていた. どの言語を書いていてもコンパイラ(もしくはInterpreter)は切っても離せないものであり内部の動きがどうなっているかを知っておきたいという欲求はプログラマーなら誰しもあると思う(少なくとも僕に

  • 2016年振り返り

    最初に今年やったことなどをつらつらと書いてみる. 2月.Dave Cheneyが中心となりGo1.6のRelease Partyが世界各地で開催されることになった(Go 1.6 release party).東京でもやりたかったのでOrganizerとなりHatenaのオフィスを借りて開催した.8月のGo1.7のリリース時は特に世界規模でやる流れはなかったがフォーマットだけは借りて再びHatenaのオフィスで開催した.この時リリースの概要をまとめたスライドを作ったが@bradfitzがそれを改変して別のMeetupの発表資料に使ってくれた嬉しかった.2017年2月にリリース予定のGo1.8のリリース時は再び世界規模でやるかってのをDaveと話したのでぜひ参加してください. 5月.みんなのGo言語の執筆を主に行っていた.自分はコマンドラインツールに関する章を担当した.今まで発表やブログ記事の

  • Systems Performanceを読んだ

    Brendan Greggによる“Systems Performance: Enterprise and the Cloud”を読んだ. Linux(Solaris)のパフォーマンスの分野でBrendan Greggという名前を聞いたことがあるひとは多いと思う.名前を知らなくてもが書いているブログやカンファレンスでの発表資料を見かけたことはあると思う.また彼が開発したFlame Graphにお世話になってるひともいるのではないか(ref. GolangでFlame Graphを描く).とにかくパフォーマンスに関して常に先端にいるひとである. そんな彼がSystems(ここでいうSystemsとはCPUやメモリといったハードウェアとKernelやOSといったソフトウェアを指す)のパフォーマンスについて内部のアーキテクチャーを含め徹底的に解説したのが書である.面白いに決まってる. 書の根底

  • GolangでAPI Clientを実装する

    特定のAPIを利用するコマンドラインツールやサービスを書く場合はClientパッケージ(SDKと呼ばれることも多いが記事ではClientと呼ぶ)を使うことが多いと思う.広く使われているサービスのAPIであれば大抵はオフィシャルにClientパッケージが提供されている.例えば以下のようなものが挙げられる. https://github.com/aws/aws-sdk-go https://github.com/Azure/azure-sdk-for-go https://github.com/PagerDuty/go-pagerduty https://github.com/hashicorp/atlas-go 特別使いにくい場合を除けば再実装は避けオフィシャルに提供されているものを使ってしまえばよいと思う(まともなものなら互換性などをちゃんと考慮してくれるはずなので).一方で小さなサービ

  • Golangにおけるinterfaceをつかったテスト技法 | SOTA

    最近何度か聞かれたので自分がGolangでCLIツールやAPIサーバーを書くときに実践してるinterfaceを使ったテスト技法について簡単に書いておく.まずはinterfaceを使ったテストの基について説明し次に自分が実践している簡単なテクニックをいくつか紹介する. なおGolangのテストの基については @suzuken さんによる「みんなのGo言語」 の6章が最高なので今すぐ買ってくれ! 前提 自分はテストフレームワークや外部ツールは全く使わない.標準のtestingパッケージのみを使う.https://golang.org/doc/faq#Packages_Testing にも書かれているようにテストのためのフレームワークを使うことは新たなMini language(DSL)を導入することと変わらない.最初にそれを書く人は楽になるかもしれないが新しくプロジェクトに参入してきたひ

  • Go1.7のSubtestsとSub-benchmarks

    Go1.7ではSubtestsとSub-benchmarksという機能がtestingパッケージに導入される.これを使うとテスト関数/ベンチマーク関数の中にテスト/ベンチマークを定義できるようになる.テストの場合はテストに階層を持たせることができ,ベンチマークの場合はTable Driven的にベンチマークを記述することができるようになる.さらに一連のテスト/ベンチマークに対して共通のsetupとtear-downを持たせることもできる. テストの場合はTable Driven Testsで十分なことも多く恩恵は少ないかもしれない.それよりもベンチーマークで効果を発揮することが多い. 例えば以下のように異なる設定値を使ってFooのベンチマークをとるとする.今までであればそれぞれ設定値ごとにベンチマーク関数を準備する必要があった. func BenchmarkFoo1(b *testing.

  • Go1.7のcontextパッケージ

    Go1.7ではgolang.org/x/net/contextがcontextパッケージとして標準パッケージに仲間入りする.そしていくつかの標準パッケージではcontextパッケージを使ったメソッド/関数も新たに登場する.contextパッケージは今後さらに重要な,Gopherは普通に扱うべき,パッケージになると考えられる.記事ではそもそもcontextパッケージとは何か?なぜ登場したのか?なぜ重要なのか?どのように使うべきか?についてまとめる. contextパッケージが初めて紹介されたのは2014年のThe Go Blogの記事 “Go Concurrency Patterns: Context”である.この記事ではなぜGoogleがcontextパッケージを開発したのか,どのように使うのか具体的な検索タスクを例に解説されている.まだ読んだことがない人はそちらを先に読むと良い. co

  • Golangの新しいGCアルゴリズム Transaction Oriented Collector(TOC)

    http://golang.org/s/gctoc Goの新しいGCのProposalが出た.まだProposal段階であり具体的な実装はないが簡単にどのようなものであるかをまとめておく. GoのGCはGo1.5において単純なStop The World(STW)からConcurrent Mark & Sweepへと変更され大きな改善があった(詳しくは“GolangのGCを追う”に書いた).先の記事に書いたようにGo1.5におけるGCの改善は主にレイテンシ(最大停止時間)に重きが置かれいた.数値目標として10msが掲げられGo1.6においては大きなヒープサイズ(500GB)においてそれを達成していた. GCの評価項目はレイテンシのみではない.スループットやヒープの使用効率(断片化の対処)なども重要である.Go1.6までのGCではそれらについて大きく言及されていなかった(と思う).例えばスル

  • GolangでFlame Graphを描く

    アプリケーションのパフォーマンス問題の解決やチューニングで大切なのは問題のコアやボトルネックに最短パスで到達することである. 基的なパフォーマンス分析の入り口はアプリケーションのスレッドがon-CPUで時間を消費しているかoff-CPUで時間を消費しているかを理解するところから始まる.on-CPUの場合はそれがuserモードかkernelモードかを特定し,さらにCPUプロファイリングによってどのcode pathがCPUを消費しているのかの分析に向かう.off-CPUの場合はI/OやLock,pagingといった問題の分析に向かう. Flame Graphはon-CPUでのパフォーマンスの問題が発覚した時に行うCPUプロファイリングを助ける.どのcode pathがボトルネックになっているのかを1つのグラフ上で理解できる.記事ではFlame Graphとは何か? なぜ必要なのか? を解