Questions and feedbacks

mtsmfm
mtsmfm commented over 1 year

Capybara でテストが不安定でつらいという話でしたが、遭遇したたまに落ちるテストの具体例とその対処を教えて欲しいです

Like(0)

qsona
qsona commented over 1 year

テナントごとにDBを論理的に分けているということですが、Auroraの物理的なインスタンス自体は(どう)分けているのでしょうか?

Like(0)

hamadata
hamadata commented over 1 year

マルチテナント化のためにapartment は使っていますか?NoSQLのDBはどう取り扱っていますか?

Like(1)

morimorihoge
morimorihoge commented over 1 year

学校のシステムって典型的な瞬間的にアクセスの集中するシステムで、障害原因もアプリ側じゃなくて学校側のネットワーク輻輳みたいなケースもあるんじゃないかなと思います。 そういう意味での障害対応とかってどんな感じなんでしょうか?学校にもよるとは思いますが、各校レベルで詳しい人がいないケースもあると思うので、2000校とかあるとサポート担当とかすごいことになりそうな気がします。

Like(1)

nabuchi
nabuchi commented over 1 year

Wantedly Peopleの方はかなりサービス数多いと思うんですが 今振り返ってみてサービスの分け方は成功したと思いますか? また、運用してみてサービス数が多いことによるつらみみたいなのはありますか?

Like(1)

KentaYoshitani
KentaYoshitani commented over 1 year

peopleっていうserviceは、今思うと細かいserviceに切り分けたいと考えますか?切り分けた事例があればその中で辛かった部分を教えて欲しいです

Like(0)

ttwo32
ttwo32 commented over 1 year

テストコードを書く文化が無いと、それを受け入れてもらうのも大変なんじゃないかなぁと思っているのですが、 同意してもらうために工夫したこと等もしあれば教えて欲しいです。

Like(2)

yuemori
yuemori commented over 1 year

セッションテーマとちょっとずれた質問ですが、「Dockerの薄いラッパー」って具体的にどんなものなんでしょう? シェルやMakefileでサブコマンド、みたいなのがよくあるユースケースかと思っているのですが何かツールとか作られてますか?

Like(0)

nobuhikosawai
nobuhikosawai commented over 1 year

ふりがなサービスとかutil的なサービスもあるような気がするのですが、gemじゃなくてmicroservice化されているのは理由がありますか?

Like(2)

vividmuimui
vividmuimui commented over 1 year

モノリシック化していくのとPHPをrubyに置き換えるのは同時に行う予定なのでしょうか? それとも段階的に行っていく予定でしょうか?

Like(0)

naoki85
naoki85 commented over 1 year

趣旨とずれているかもしれませんが、Railsでマイグレーションすることに関してです。
大きなテーブルにマイグレーションをかける際に、何か工夫されていることなどあるでしょうか?
例えばサービス停止しているとはいえ、1億レコードあるようなテーブルだとかなりの時間を要するかと思います。

Like(0)

shimpei
shimpei commented over 1 year

機械学習を専門とする人がつくる Python の実装は Http で Go から呼び出せるようにしているのですか? その場合、機械学習を専門とする人たちが WebAPI も実装しているのですか?

Like(1)

yskkin
yskkin commented over 1 year

各マイクロサービスが持つべきロギング等の共通機能を内部のリポジトリに切り出しているとのことでしたが、 この共通部分は Ruby, Python, Go それぞれでメンテしているのでしょうか? もしそうであるなら負担に感じたりはしないのでしょうか?

Like(0)

yuemori
yuemori commented over 1 year

現在進められているというprofile serviceの話についてです。 「writeは該当サービスの責務を持つserviceのAPI経由で行う」とのことですが、readの方はどうされてるのでしょう? そこは妥協して直接しているのでしょうか。

あとモデルは各リポジトリで別々に管理されているようですが、例えばモデル部分はgem化しておいてインターフェースに変更があったらバージョンアップ+実装変更みたいなアプローチも考えられるんですがどう思いますか?

Like(0)

morimorihoge
morimorihoge commented over 1 year

発表者です。質問時間多少残せる見込みですので気軽にご質問下さい

Like(1)

yhirano55
yhirano55 commented over 1 year

翻訳記事の依頼ってどのようにやっているのか気になってます!

Like(1)

takahashim
takahashim commented over 1 year

まつもとさんによる「楽しいプログラミング」について言及しているものとしては、1999年のJUSのworkshopの資料とかにもあるので、かなり初期からのRubyのコンセプト(この資料では「Rubyの信条」と言ってます)だったのでした。 https://www.jus.or.jp/workshop/ruby/ruby-report/ws1.pdf

Like(5)

mumoshu
mumoshu commented over 1 year

@yuemori 質問ありがとうございます!

ビルダーイメージとランタイムイメージを分けるとのことですが、Railsの場合どういうところを気をつけられていますか?

もう意識されてることもあるかもしれませんが、

  • ビルダーイメージはできるだけfatに、ビルドに必要なものをなんでも入れる
  • ランタイムイメージにはベースイメージにビルド結果以外のものは極力入れない
  • それぞれgitコミットsha1やsemantic versionでタグ付けする
  • ある時点のビルダーイメージを新しいビルダーイメージのベースイメージにする(ベースイメージは定期的に更新する。Layer Cachingの効果を保つため)
  • ある時点のランタイムイメージを新しいランタイムイメージのベースイメージにする(ベースイメージは定期的に更新する。Layer Cachingの効果を保つため)

Railsの場合、どうしてもnative extension用のパッケージなどでサイズが大きくなりがちなのですが、かなり複雑なアプローチをとらざるを得なくてつらくなりがちです (例えばビルダーイメージから必要なファイルだけとってくるとかそういうアプローチもあると思うんですがとてもつらい)

yuemoriさんがどのあたりを辛いと感じていらっしゃるか次第でもう少し具体的な回答もできそうですが、

ビルダーイメージから必要なファイルだけとってくるとかそういうアプローチ

基本的には時間かけられる場合はそのアプローチがベストだと思ってます。その上でどれだけ楽できるか・・という問題意識でやってます。

ぼく個人的には「何をビルダーからランタイムにコピーするか」がどこに書かれているかわかりづらいケースがあるというのが一番つらく感じます。それに関してはDockerのMulti-Stageビルドが一番まし(ランタイムとビルダーを同じDockerfileに書けて、どこからコピーするかというのもDockerfile内にself-containされるから)と思っています。

ただ、Multi-StageビルドやるとPrivate GitHubレポジトリに依存している場合に必ずアウトになる(Layer Cachingを諦めるか、もしくはSSH秘密鍵などがビルダーイメージに残ることを許容することになる)ので、habitusなどの一時secret server付きでdocker multi-stage buildを実行できるツールを使うのが個人的にはベストプラクティスです。

参考: https://github.com/cloud66/habitus/issues/89

native extension用のパッケージなどでサイズが大きくなりがち

これはその通りで、ぼくは時間がかけられる場合は地道にゴミファイル消してます・・。例えば、vendor/bundle内のgemには、ネイティブエクステンションビルド後の.aとか.oファイルとか、ドキュメント?がpdfファイルとして残ってたりとか、バイナリをバンドルしてるgemであればlinux用のバイナリだけあればいいのにmacOSなど他のプラットフォーム向けのバイナリがgemに残ってたりとか・・・

https://github.com/mumoshu/kubeherd/blob/729e233b34bc7d369ac62cc8e5d19e83152fff51/builds/alpine-rails/dockerimages/runtime/.s2i/bin/assemble#L57-L94

こういう泥臭い方法で消したりすると、イメージサイズが数割減ることもありますね。

Like(0)

mumoshu
mumoshu commented over 1 year

@qsona 質問ありがとうございます!

docker build中にbundle installしない理由と、どういう方法でやっているかが知りたいです!

dockerだけでやる場合は、

docker build -t my-builder-image:$VERSION -f Dockerfile.builder .
# 予めGITHUB_TOKENを設定しておき・・
docker run -v $(PWD)/build/vendor/bundle:/src/vendor/bundle -e GITHUB_TOKEN -w /src my-builder-image$VERSION bundle install --deployment
docker build -t my-runtime-image:$VERSION -f Dockerfile.runtime .

みたいな感じで、bundle installだけはdocker runで実行する(そうすると、必然的にvendor/bundleをホストボリュームに作成して、それをランタイムイメージにADDすることになるのがわかりづらいところ)といいです!

それか、先のコメントで @yuemori さんに回答したように

habitusなどの一時secret server付きでdocker multi-stage buildを実行できるツールを使う

とbundle installをdocker build中でやっても安全にできます。

Like(1)

k0kubun
k0kubun commented over 1 year

nested loop joinがnested loop join以外の手法と比べてどういうメリット/デメリットがあるのか知りたいです

Like(0)

ttwo32
ttwo32 commented over 1 year

コンセプトを決める上で、これって価値観へのカウンターになるんだろうか?とか迷ったりすることはありますか? もしあればそんな時はどうしているか、または工夫していることなんかあれば、参考までに教えていただきたいです。

Like(0)

Altech
Altech commented over 1 year

Wantedlyさんは、ネイティブアプリも途中からかなり分割していっている印象があるのですが、バックエンドのマイクロサービス化とネイティブアプリ・フロントアプリの関係についてもできればお聞きしたいです。 (当日は裏で司会をしている予定なので、リアルタイムでは聞けない可能性が高いのですが... >< )

こちらセッションの最後でお答えしました!基本的には分割はやってなくて、新しい事業に対してアプリとサーバーを新しく作っていて、そこで問題になる中核ドメインの共有問題に対してマイクロサービスによる解決を試みているという関係です。

Like(1)

taiki45
taiki45 commented over 1 year

primary id が定義されてないテーブルでは secondary index はなにを参照するのか気になります

Like(0)

ota42y
ota42y commented over 1 year

範囲検索で二つ目のインデックスが効果ある場合(ICP狙いの場合)って具体的にどういう場合なのでしょうか?

Like(0)

morimorihoge
morimorihoge commented over 1 year

ロゴ作りの時に「こういう要素・条件は最初に出しておいた方が良い」というものがあれば知りたいです。 # 例えば、スライドにもあったTシャツなどにも使うなら前からこういう条件を付けておいた方が良い、など

Like(0)

This software is available as open source under the terms of the MIT License.
Copyright © 2018 Yoshiyuki Hirano