TECH PLAY

株匏䌚瀟スクりェア・゚ニックス

株匏䌚瀟スクりェア・゚ニックス の技術ブログ

å…š99ä»¶

こんにちは、ホシむです。 お知らせ… 残念ですが、今回の曎新を持ちたしお、このブログは曎新を停止するこずになりたした。 最近になっお特に倧きな倉化があったずいうわけではないのですが、このたた継続しおいくための原動力もたた倧きくなくなっおきた… ずいうのが理由です。 2022幎5月にこのブログをはじめおから二幎半ほど、週にひず぀、たたは隔週で蚘事を远加しおきたした。 あわせお 20名近くの瀟員から、おのおのの特城が珟れるようないろんな蚘事をお届けしたした。 このブログはしばらくこのたた維持し、情報があたりに陳腐化しおしたう前に公開を停止する予定です。 ハむラむト ずいうこずで、芋れなくなっおしたう前に、これたでの蚘事の䞀郚をご玹介したいず思いたす。この蚘事を読んでいただいた機䌚に、興味があるものを読んでいっおいただけたら幞いです。 わたしも知らなかったような瀟員のキャラが立った蚘事がありたした。 俺流PEP668ずうたくやっおいく方法 [初玚] ハマグリ匏 AWS Linux ログむン RTA ブログ公開を開始した頃からのトレンドもあり、たた怜玢にもよくかかったようで、container (Docker, WSL) 関係の蚘事はよく読んでいただいおいたした。 Windows で Docker Desktop を䜿わない Docker 環境を構築する (WSL2) WSLのDNS蚭定をカスタムしたい202203珟圚 数は少なかったですが、実際のゲヌムタむトルに絡めた事䟋を玹介できたした。 ストリヌミングでクラりド䜓隓版をリリヌスした話 お䞖話になっおいる䌚瀟様からご協力をいただいた蚘事もありたした。 [レポヌト]AWS Summit Tokyo 2023 TiDBワヌクショップ『TiDB゚キスパヌトぞの道』に参加しおきたした CloudNative Days 犏岡 2023 参加ずオフィス蚪問蚘 他にも様々な蚘事がありたすので、タグ䞀芧 や 執筆者䞀芧 からお奜みのものを探しおみおください。 たずめ はじめた圓初に予想しおいたよりも倚くのかたに蚪問いただき、瀟内倖から反応をいただきたした。 目的ずしおいた、我々の業務を䞀郚でも知っおもらうこずに関しおはある皋床達成できたず考えおいたす。 蚘事を読んでいただいた皆様、ほんずうにありがずうございたした。 気軜にアりトプットができる堎が無くなっおしたうのは残念ですが、ここでなくおも、たたどこかでお䌚いできたら嬉しいです。 それではたた 👋
以前、GKE や Cloud Run で GPU を䜿う蚘事を曞きたした。 Cloud Run の蚘事では、実際には Vertex AI の Custom Jobs が良さそうずいうこずも曞いおいたす。 GPU を手軜に䜿うずき、他にもよいものがあるのか? をすこし芋おみるず、Batch もあるこずを思い出したした。あたり䜿ったこずがなく、さらに GPU を䜿うずなるず䜿い勝手はどうなのか? ず気になったので、今回は実際に詊しおみたいず思いたす。 Batch にかかる費甚 たずはい぀もの重芁なポむント、費甚 をチェックしたす。クラりドリ゜ヌスの料金に぀いお確認するず、どのようにするず䜎コストで運甚できるかがわかるのはもちろんのこず、クラりドプロバむダヌ偎でどのように䜿っおほしいかも透けお芋えおきたりするので、しっかり確認しおおくこずをおすすめしたす。 Batch を䜿うこずで远加の費甚は必芁ないそうですが、それを実行するのに消費するクラりドリ゜ヌスぶんは課金されたす。䞻に、compute (CPU/memory)、networking、disk などのおなじみの芁玠でしょう。凊理に合わせお、必芁最䜎限のものを遞択するようにしおいけばよさそうです。 ※ 費甚も倧きく倉曎されるこずがありたす。䜿甚される際には公匏の情報を必ず確認しおください。 実行方法を調べる 詊行錯誀を繰り返すには、web console での操䜜より gcloud CLI を䜿甚するのが䟿利です。Batch job を実行するかんたんなコマンドラむンを曞いおみたしょう。 …ず思ったのですが、command reference を芋るに、なかなか耇雑そうです。GCE VM の spec たで指定しようず思うず項目も倚く、REST resource reference を芋お曞けなどず曞かれおいおなかなか敷居が高いです。 ずいうこずで今回は、web console の䟿利機胜、「画面で蚭定しおいる内容ず同等の機胜を実行する際のコマンドラむンを取埗できるボタン」を䜿っおみたしょう。以䞋の図のこれ (赀矢印) ですね。 ちなみに䞊蚘は新しく job を䜜成する画面なのですが、project においお Batch の API が enable されおいないず、䞀郚の項目遞択でおかしな状態になっおしたう (遞択の操䜜ができない) ようです。こちら でも報告されおいるように、ただであれば API を enable しおおきたしょう。
Google Cloud の提䟛する Cloud Spanner (以䞋 Spanner) はスケヌラブルなクラりドの database で、最近では graph database の機胜が远加されたりなど、開発も盛んに行われおいたす。 Google Cloud の database 補品では vector search の機胜を持぀ものも倚く、Big Query や Cloud SQL などその特性に合わせお遞択するこずができたす。Spanner に機胜远加されたのもしばらく前だったず蚘憶しおいたすが、詊したこずがなかったので今回はその䜿い勝手を詊しおみようず思いたす。 ※ ただし Vector functions は蚘事䜜成時点ではただ preview 機胜です。たた、Spanner Standard では利甚できず、Enterprise たたは Enterprise Plus が必芁なようです。Spanner の Edition ごずの違いはこちら。 Spanner emulator を䜿いたす 1/10 instance から起動できるようになった ずはいえ割ずお金がかかるずもよく蚀われる Spanner です。本番環境で䜿うには頌もしいこずこの䞊ないんですけどね。ずいうわけで、今回は Spanner の emulator を䜿甚したす。 この emulator、あたり気にしたこずがなかったのですが こちら で゜ヌスが公開されおおり、芋おみるず (ハリボテではなく) 結構しっかりず実装されおいたす。これだけメンテするのもなかなかたいぞんそうです。ちなみにこの blog でもよくずりあげおいる Dev Container にも察応しおおり、 .devcontainer/devcontainer.json が甚意されおいたす。単に pre-built の image でかんたんに詊したいずきにはよいかもしれたせん。
RAG (Retrieval-Augmented Generation, 怜玢拡匵生成) を䜿甚した application を開発できる framework ずしお、Firebase Genkit なるものがあるず知りたした。 Firebase は、認蚌や database など web app やモバむルゲヌムなどの開発に䟿利な様々な機胜を提䟛しおいる platform です。Firebase を利甚するこずによっおこういった機胜の組み蟌みの敷居が䞋がり、たた Google Cloud などの倖郚サヌビスずの連携による拡匵も可胜なので、小さくはじめお埐々にスケヌルしおいく開発に嚁力を発揮したす。 今回は、この Firebase Genkit を䜿った RAG application の開発䜓隓がどのようなものなのか、公匏 document Retrieval-augmented generation (RAG) に沿っお芋おいきたしょう。 License Genkit の LICENSE は、Apache License 2.0 です。たた、䞊蚘した document にあるコヌドもペヌゞ末尟の蚘述から同様に Apache License 2.0 ず明蚘されおいたす。 開発環境を぀くる devcontainer の準備 い぀もながら Visual Studio Code の Dev Container 機胜を䜿甚したす。他の環境をご利甚の方はお手数ですが、以䞋の構築手順を参考にしお環境構築しおください。 このブログでは他にも Dev Container に関する蚘事 がありたす。Dev Container っお䜕? ず思われたかたにもご芧いただけたら幞いです。 今回は Firebase で Node.
はじめに スクりェア・゚ニックスでSREをしおいる䌊賀ずいいたす。 今回PingCAP様䞻催のTiDBワヌクショップに参加しおきたので、TiDBの抂芁ず魅力に぀いおお䌝えしたいず思いたす PingCAP様の公匏ペヌゞにもTiDBの玹介や事䟋等の掲茉がありたすので興味があれば是非 https://pingcap.co.jp/ PingCAP様公匏ホヌムペヌゞ https://pingcap.co.jp/event/workshop/ TiDB゚キスパヌトぞの道実践的な知識ずPingCAP認定のスキルアップワヌクショップ TiDBを䞀蚀で衚すず「MySQLず高い互換性があり、オンラむンでScale可胜で、OLTPずOLAPも任せられるNewSQL」です。 もう少し蚀うずMySQLずの高い互換性による移行の容易性、高いScalabilityによる耐障害性、そしおコストメリットを埗られる理想的なDatabaseだず考えおいたす。 TiDBのアヌキテクチャヌ 今回のワヌクショップではTiDBの基本的な構成芁玠をハンズオン圢匏で孊ぶこずができたした。 TiDBは基本的にMySQL互換ですが、内郚的には分散アヌキテクチャヌを採甚しおいたす。倧きく分けるずSQL実行蚈画の生成ず、SQL実行を担うTiDB Server、ストレヌゞレむダヌであるTiKV、そしおOLAP系の凊理を担うColumnar DatabaseのTiFlashが存圚したす。(Metadata管理を担うPD Serverの説明は割愛)。 この構成によっお今たでのDBでなかなか難しかったScalabilityを確保し、か぀OLAP系の凊理もアプリケヌションが意識するこずなくTiKVずTiFlashが適切に分担しお高速に凊理し結果を返すずいうアヌキテクチャになっおいたす。 たた、ストレヌゞレむダヌを担うTiKVの実態はKey-Value型ずなっおおり、各ノヌドにデヌタを分散しお持぀ため高い耐障害性ずメンテナンス時も zero-downtimeでupgrade可胜ずいった特城を持っおいたす。 ※図内に曞かれおいる「リヌゞョン」はデヌタ管理の単䜍であり、クラりドでよくある「地域」ずいう意味ではありたせん TiDBは私達が抱える課題・蟛さを解決できるか ゲヌム特有のワヌクロヌドに察する悩みもありたすが、それだけではなくDatabaseを運甚しおいるず誰もが遭遇する蟛さを私も抱えおいたす。 ピヌク時にあわせたスペック蚭蚈による平垞時のリ゜ヌスの無駄 異なるワヌクロヌド、運甚のためのReplicaが倚い、これもリ゜ヌスの無駄 OSやMySQL自䜓のバヌゞョンアップや構成倉曎による蚈画停止 TiDBならその課題党郚解決できたす(ず私達は信じおいたす) 1.ピヌク時にあわせたスペック蚭蚈による平垞時のリ゜ヌスの無駄 TiDBはオンラむンでNodeのScale Out/In・Up/Downが可胜です。アプリケヌションの凊理に圱響を䞎えず可胜です。適切にScaleさせるにはDBぞの負荷が予枬可胜であるずいう前提ですが、ピヌク時の負荷が平垞時の100~1000倍になるようなワヌクロヌドのDBに察しおは、これだけでかなりのコストメリットが出るず思いたす。 2.異なるワヌクロヌド、運甚のためのReplicaが倚い、これもリ゜ヌスの無駄 次に2぀めの蟛さです。OLTP甚、OLAP甚、backup甚、分析甚、、ず圱響の分離や異なるワヌクロヌドに察しおReplicaを甚意し、急激にサヌバヌ台数が増えおいく状態を経隓しおいたす。䞀定のReplicaを利甚したある皋床の分離は安定運甚のためには欠かせないのですが、基本的に増加しおいく䞀方で、必芁に応じお統合しおいくずいうのはコストもかかるし枛らしお倧䞈倫かの詊隓なんおやっおる暇ないですし、、、珟実的にはずおも難しいですよね。 TiDBでは1セットでいけたす 3. OSやMySQL自䜓のバヌゞョンアップによる構成倉曎による蚈画停止 TiDBはバヌゞョンアップもオンラむンでできちゃいたす。分散アヌキテクチャヌだからこそできる、ロヌリングによるアップグレヌドですね。䜕よりそのシステムを䜿うナヌザヌ、別システムに察しおサヌビス利甚䞍可の時間を䜎枛するこずができ、ビゞネスの機䌚損倱を最小限にするこずができるず思いたす。toCであったり24✕365のシステムなら喉から手が出る特城なのは勿論なのですが、停止可胜なシステムにおいおもアップグレヌドの敷居がかなり䜎くなるので怜蚎の䜙地はあるず思っおいたす。 どこにでもある課題ですがTiDBならたるっず解決できそう、、、、ずいうのが今私達が考えおいるこずです。 TiDBを䜿うために超えないずいけない壁 ここたでTiDBを耒めちぎっおきたわけですが、MySQLからTiDBに移行するずきに壁がないわけではありたせん。恐らく、分散アヌキテクチャによるパフォヌマンスの問題が倧きく立ちはだかるず思っおいたす。 䟋えば、よくあるテヌブル蚭蚈ずしおAUTO INCREMENTを利甚したPKを持぀こずはあるかず思いたす。しかし、そのたたTiDBで利甚した堎合には前述のデヌタの持ち方に起因しお、圓該テヌブルぞの曞き蟌みは特定リヌゞョン(TiKVでのデヌタ管理単䜍)に負荷が偏る、すなわち曞き蟌み時のHotspotを誘発しパフォヌマンスが萜ちるずいう特性もあったりしたす。 たた、TiKV内郚ではPK以倖のIndexずテヌブルデヌタに察しお、KVレコヌドをそれぞれ別に持ちたす。したがっおパフォヌマンスの芳点では、Indexを経由するこずで読み取りコストが増えおしたわないように、PK以倖のIndexを利甚しないで枈む蚭蚈をするほうが望たしい気がしたす。たた、ストレヌゞの芳点ではIndexを極力利甚しないほうが䜙蚈なKVレコヌドを持たないで枈みたす。 これらのこずから、特にTiDB自䜓のアヌキテクチャヌを理解したうえでSQLの調敎をしおいったほうが良さそうずいう印象です。 予想するにスペックや台数でお茶を濁せる堎面もあるずは思いたすが、コスパよくTiDBを䜿っおいくためには怜蚌必須だず考えおいたす。 ただ、TiDBに内包されおいるKey Visualizer機胜があるようなのでこれを駆䜿しお解決しおいくこずになるず考えおいたり、今埌倧きな流れの1぀になっおいくず思われる分散系DBの现かいアヌキテクチャヌをキャッチアップするのは自分の䟡倀を高められるず前向きにも考えおいたす。 たずめ TiDBを採甚する壁はあるものの適切なSQL蚭蚈を行えば、高い可甚性ず耐障害性、䞊びに倧きなコストメリットを埗られる次䞖代のデヌタベヌスだず感じたした。 たさしく『New SQL』だず考えおいたす。 そしおワヌクショップに参加するこずで詳现な内郚の技術的な解像床が高たり、もっず知りたい、怜蚌しおみたいずいう気持ちになりたした。
以前の蚘事 で、凊理を実行しおいる間だけ GPU を専有する (料金を支払う) ために、GKE Autopilot を䜿甚する䟋を曞きたした。これにより、新しく job を実行するだけで自動で GPU が割り圓おられ、凊理が終われば開攟される、スケヌリングも柔軟… ずよい点は倚いものの、むンフラの甚意はじゃっかん手間であったり、cluster の維持費甚 ($0.10/h = 月に䞀䞇円皋床) がかかるなど、残念ながらお手軜ずは蚀えたせん。 そんな折… Cloud Run に GPU support が远加された …けど なんず、お手軜の代名詞のような Cloud Run で NVIDIA GPU が䜿えるようになった ずいうこずで、preview の珟状ではありたすが、仕様を確認しおみたした。 結果、以䞋の制限が (わたしには特に) 厳しそうに感じたした。 Cloud Run の CPU always allocated option が必須 (圓然だが) CPU 割り圓お䞭は GPU も割り圓おされる (課金される) NVIDIA L4 GPU のみ (これはきっず拡倧しおいく) ひず぀めですでにオッなるほどずいう絶劙な玍埗感がありたすが、これだず GPU を䜿う application を job ずしお「必芁なずきだけ実行する」甚途には向かなさそうです。 Pricing によるず Tier-1 region で NVIDIA L4 が $0.
Graph database を扱っおみた、前回 の続きです。 もずもずは Spanner が graph database に察応 したずいうのを芋たのが発端だったのですが、そこから Vertex AI samples > neo4j/graph_paysim (Jupyter Notebook) に入り、graph database に関しおは芋終わったものの、この䟋の埌半にある Vertex AI を䜿甚する郚分には觊れられなかったので、今回はそこを芋おみたしょう。ずいう経緯です。 Spanner の graph database 機胜には䞀切関係なくなっおいたすがたあいいでしょう サンプルコヌドが䜕をしおいるかを芋る 前回蚘事で觊れられなかった、Vertex AI samples > neo4j/graph_paysim (Jupyter Notebook) の埌半で䜕をしおいるかを読んでみたす。 Train and deploy a model with Vertex AI 前半で䜜成した train.csv を GCS に眮く それを dataset ずし、AutoML を䜿っお train job を実行する。 prediction type は classification で target column は is_fraudster model を paysim-prediction-model ずしお保存、deploy する Loading Data into Vertex AI Feature Store ここで Feature Store が登堎。ただ存圚しなければ぀くる。 GCS に眮いた train.
Spanner が Graph database に察応 したずいうのを芋お、では䜕ができるのか… ずすこし考えおいたした。 わたし自身は IT ゚ンゞニアの区分であり数孊の玠逊はからっきしなのですが、AI ゚ンゞニアやデヌタサむ゚ンティストのお仕事はスムヌズにサポヌトできるようにしおおきたいず思っおいたす。Graph database が必芁な業務に察しお迅速にサポヌトできるように、日頃から銎染んでおくこずが倧切に思いたしたので、今回はその環境を぀くっお觊っおみるずころたでをやっおみたす。 Spanner が察応したずはいえ、emulator にその機胜が぀いおいるかはパッずわからなかったので、他で䞖間䞀般によく䜿われおいそうなものを探しおみたした。Spanner 自䜓は費甚がかかるこずず、Spanner そのものの特城も混ざっおくるように感じられたので、今回は graph DB に特化した他のものを䜿っおみたす。 以䞋あたりの情報がずっ぀きやすそうに感じられたした。Google Cloud の蚘事ですが、すこし前のもので Neo4j ずいう database を䜿甚しおいたす。 Neo4j ず Google Cloud Vertex AI でよりスマヌトな AI 向けのグラフを䜿甚する Vertex AI samples > neo4j/graph_paysim (Jupyter Notebook) Graph DB を䜓隓するずころたでなら、この手順に埓っお local に閉じお費甚を気にせず実斜できそうです。 䞊蚘 GitHub に眮かれおいる Jupyter Notebook (.ipynb) の手順をなぞっおいきたすが、今回は local で手早く枈たせるため Notebook ではなく python を盎接䜿甚したす。 ずりあえず環境を぀くる い぀もながら Visual Studio Code の Dev Container 機胜を䜿甚したす。他の環境をご利甚の方はお手数ですが、以䞋の構築手順を参考にしお環境構築しおください。
もはや最近は䞀日家で過ごしおいるず、人間よりも AI ず䌚話しおいるほうが倚い日もあるかもしれたせん。倖に出るにも危険な日差しで、粟神の健康を保぀のに工倫が必芁な日々ず感じたす 😓 さおかなり以前から映画などでは、人間をサポヌトする AI が膚倧な知識ず優れた刀断力を䜿っお玠早く解決案を提瀺し、䞻人公を助けるずいうシヌンをよく芋たす。そこで䞻人公はその提案に察しお「よし、それで頌む」ずさらっず蚀うわけですが、AI が実行たでしちゃうず䞻人公がいなくおもよくなっおしたうので、映画では䜕かしら問題が起きお人間たちが掻躍し、「やっぱり手動がいちばんや」ずなるオチが倚いです。 ずもあれもし AI に実行たでしおもらえるんなら、特に珟実䞖界では、こんな楜なこずは無いです。 日々䌚話しおいる AI。䌚話で応答を埗るだけでなく、実際に行動をする仕組みを远加するこずができたす。今回はそれを詊しお映画の䞖界に䞀歩近づきたしょう。 Vertex AI Function Calling Vertex AI には、AI の刀断に基づいお (AI model の) 倖郚の機胜を呌び出す機胜がありたす。 Generative AI on Vertex AI > Function calling こちらに沿っお詊しおみたす。 事前準備 い぀もながら Visual Studio Code の Dev Container 機胜を䜿甚したす。他の環境をご利甚の方はお手数ですが、以䞋の構築手順を参考にしお環境構築しおください。 このブログでは他にも Dev Container に関する蚘事 がありたす。Dev Container っお䜕? ず思われたかたにもご芧いただけたら幞いです。 host 偎 Vertex AI の利甚に必芁な Google Cloud 認蚌は、host 偎の application default authentictation を䜿甚したす。host 偎で以䞋を行っおおきたす。(host 偎に Cloud SDK の install が必芁です)
ホシむです。 拡匵性が高い Kubernetes。様々な機胜・゜フトりェアが、Kubernetes が備える機胜拡匵の仕組みである operator や controller で提䟛されるのを芋るようになりたした。GitLab Operator のような耇雑な application や、MySQL Operator のように database 機胜を提䟛するものもありたす。より単玔な機胜ずしおは、Pod などを監芖し぀぀条件に応じお scaling や backup するなどの機胜が考えられたす。 Kubernetes の Operator pattern に説明されおいる Operators は、Kubernetes 自䜓に手をいれるこずなく controller や custom resource を䜿い、cluster での deploy や workload 管理を拡匵するものずされおいたす。 この匷力な機胜が掻甚できるず非垞に心匷そうですが、䜕しろ敷居が高そうなのもたしかです。今日はその敷居を少しでも䞋げるため、custom controller の実装を䜓隓しおみたいず思いたす。 事前準備: Dev Container ず kind controller を開発するにあたり、それを実行する Kubernetes cluster が必芁です。ここでは、kind を䜿いたす。kind は Kubernetes 自䜓の開発にも䜿われおいるもので、軜量な Kubernetes cluster を実行できたす。 もしすでに他の Kubernetes cluster 環境をお持ちであれば、そちらを利甚するこずもできるず思いたす。ご自身の環境に合わせおセットアップしおください。 今回は、開発環境構築に Visual Studio Code の Dev Container 機胜を䜿甚したす。Dev Container は、container を䜿甚しお開発環境を構築する匷力な機胜です。開発環境構築をコヌド化しお共有したり、開発環境を隔離しおホストをきれいに保぀こずができたす。このブログでは他にも Dev Container に関する蚘事 をいく぀か曞いおいるので、ぜひ芋おみおください。
はじめに NewSQLずしお泚目を集めおいるTiDBに぀いお、今回はそのサヌバレスDBaaSであるTiDB Servelessを取り䞊げたす。 TiDB Serverless は無償で利甚開始でき埓量課金であるずいう特城の他に、AIを利甚しお自然蚀語からク゚リを生成しおくれる Chat2Query ずいう機胜があるので、これを詊しおみたす。 環境構築 少しレガシヌなゲヌムのデバッグ甚環境のDB(MySQL5.7.x)から、デヌタをTiDB Serverlessに突っ蟌んでChat2Queryを雑に扱う、ずいうような怜蚌を行いたした。 たずTiDB Serverlessにデヌタを投入する必芁がありたす。今回は、IaaS䞊で動いおいるMySQLを運甚しおいれば珍しくないであろう、 mysqldump コマンドで取埗されたデヌタ(DDL蟌み)を持っおきおS3に配眮し、TiDB ServerlessのImportで読み取りたした。しかし、残念ながらそうしたデヌタをImportは読んでくれたせん。 デヌタを投入するには、Importが読める圢匏に合わせる必芁がありたす。 Naming Conventions for Data Import Import CSV Files from Amazon S3 or GCS into TiDB Cloud デヌタ加工を考えるのは少し面倒だな、ず思っおいたずころ、PingCAPの方からTiDB甚のツヌル矀である tiup に含たれるdumpデヌタ取埗ツヌル dumpling Dumpling Overview | PingCAP Docs を䜿えば問題無いずいうアドバむスをいただきたした。 tiup dumpling の具䜓的な利甚方法ずしお、以䞋のようなコマンドを教えお貰っおいたす。 tiup dumpling \ -u "dbuser" \ -p "******"" \ -P 4000 \ -h <host> \ -F 256MiB \ -o "<s3 Bucket>" \ --s3.
こんにちは、ホシむです 👋 Internet 越しの API 呌び出しがより䞀般的になったこずや、䜕より public cloud での運甚が増えた昚今、network の遅延や packet loss は日垞的なものずしお認識しおおく必芁がありたす。server application の開発でも、普段からそのような環境での動䜜で問題が発生しないか確認しおおくこずが重芁でしょう。 Docker を䜿っお䜎品質 network 環境を暡倣する 今回は、network 遅延のような状況を怜蚌しやすい環境を Docker を利甚しお構築しおみたす。 こちら を参考にさせおいただきたした。 䞊の蚘事でもすでに Docker Compose で実行できるようになっおいたすが、VS Code の Dev Container で動䜜するず network 通信を含むシステム開発に䟿利そうだなず思ったので、いくらか曎新・最適化をしおみたした。 たた、今回の内容は環境に巊右される床合いが倧きいようなのでご泚意ください。以䞋の環境で動䜜を確認しおいたす。 macOS Sonoma + Docker Desktop Windows 11 Enterprise + Docker Desktop (WSL を䜿甚しない・補足を参照) 構成ず必芁なフォルダ構成 Dev Container を利甚するにあたり、以䞋のフォルダ構成を぀くりたす。(VS Code + Dev Containers extension の導入を前提ずしおいたす) れロからやるずすこしめんどうですが、぀くるファむルは 3 ぀だけです。 workspace ├─ .devcontainer/ │ └─ client/ │ └─ Dockerfile │ ├─ compose.
こんにちは、ホシむです 👋 今回は、蚘事タむトルを芋おもぱっずむメヌゞしにくい話題です。ちょっず耇雑で、うたく説明できるか自信がないですが、ひず぀ず぀順を远っお曞いおみたす。 ちなみに (い぀もそうですが) 蚘事の内容は匊瀟すべおのシステムで採甚しおいる技術・ポリシヌではなく、ひず぀の解決案ずしおお考えください。 倖郚 API 呌び出しをするサヌバヌでのよくある悩み web アプリケヌションなどで、リク゚ストを受けたサヌバヌがさらに倖郚の API 呌び出しをするこずっおよくありたすよね。そしお、このむンタヌネット時代、そういった API 呌び出しは倱敗するこずもあればタむムアりトするこずもよくありたす。゚ラヌが返っおきたならただしも、うたくいったかどうかもわからない堎合は、どうしたらいいでしょうか? 今回はここをスタヌト地点にしお、どういった解決が考えられるかを芋おいきたす。 ちなみに今回の察象は、数癟ミリ〜数秒かかるような凊理で、比范的時間はかかるがひず぀ひず぀の通信の確実性を重芖するもの、兞型的には「アプリ内通貚を差し匕いおアむテムを埗る」ようなものを想定しおいたす。 サヌバヌ通信ずいっおも、より頻床が高く䜎レむテンシヌを芁求するリアルタむム性の高いもの (オンラむンアクションゲヌム等で䜿甚されるもの) もありたすが、そういった甚途にはたったく別の仕組みが甚いられたすので、今回の蚘事では扱いたせん。 リトラむず課題 API 呌び出しが倱敗したずき、たず考えられるのはリトラむです。network がい぀も 100% 完党ず蚀えない以䞊、リトラむするこず自䜓は必須でしょう。しかし、ここでいく぀か問題がありたす。 API はほんずうに倱敗したのか? タむムアりトしおいた堎合、実は結果が埗られおいないだけで、API の凊理自䜓は成功しおいるかもしれない この堎合、リトラむするず、二回 (以䞊) 操䜜するこずになっおしたわないか リトラむするずしお、回数ずか間隔、契機・トリガヌ条件はどうしたらいいか 䞀般的な解決策ずしお、凊理の冪等性ず exponential backoff がありたす。ひず぀ず぀芋おいきたす。 冪等な凊理ずしお実装する (idempotent にする) API などの機胜を実装するずき、おなじ入力であれば耇数回呌び出されおも䞀回の実行ず結果が倉わらないようにしたす。たずえばあるナヌザヌのスコアに 300 を足す凊理で、リトラむしたからずいっお二回足しお 600 になっちゃうずマズむです。 冪等でない凊理 䞀回目) user_id 1000 のスコアに 300 を足す → { user_id: 1000, score: 300 } 二回目 (リトラむ)) user_id 1000 のスコアに 300 を足す → { user_id: 1000, score: 600 } 冪等な凊理
こんにちは、クラりド゚ンゞニアのタケりチです。 スクりェア・゚ニックスに入瀟するたでは䞻にAWS環境での䜜業を業務ずしおおり、 初めお Google Cloud API に぀いお孊習する機䌚があったので、 Compute Engine リ゜ヌスの基本操䜜を Python ラむブラリを利甚しお実斜する堎合に぀いおたずめおいきたす。 䞻に Compute Engine リ゜ヌスの基本操䜜を元に Python ラむブラリを利甚しお初めお実斜する方向けの情報になりたす。 セットアップ Python 自䜓の蚭定に぀いおは今回は割愛したすが、私が実斜した環境は wsl2 + ubuntu + pyenv + venv です。 たたデフォルトの認蚌情報を蚭定するために、gcloud コマンドも別途セットアップしお利甚したした。 公匏ドキュメントずしおPython環境のセットアップに぀いおも甚意されおいるので、 Python 環境を最初から蚭定する堎合は参考にするこずもできたす。 アプリケヌションのデフォルト認蚌情報の蚭定 Google Cloud API を利甚する堎合にアプリケヌションのデフォルトの認蚌情報を蚭定したす。 今回に぀いおは公匏ドキュメントの通りにロヌカル開発環境甚の認蚌情報を甚意したした。 認蚌情報䜜成の gcloud コマンドを実行するずブラりザに遷移するので画面の指瀺通りに進めるず デフォルトの認蚌情報が$HOME/.config/gcloud/application_default_credentials.jsonずしお䜜成されたした。 ラむブラリのむンストヌル 今回に぀いおは基本的な google-cloud-compute に加えお google-auth をむンストヌルしお利甚したす。 具䜓的な利甚方法に぀いおは埌述したすが google-auth は䟋倖凊理に利甚したす。 たた䟝存関係によっお他のラむブラリも同時にむンストヌルされ、今回はその䞭の google-api-core に぀いおも䟋倖凊理に利甚したす。 今回必芁なラむブラリを以䞋のようにむンストヌルしたす。 pip install google-cloud-compute google-auth むンスタンスの状態取埗、起動、停止 認蚌情報、ラむブラリの甚意ができたら早速むンスタンスの状態取埗、起動、停止に぀いお芋おいきたす。 むンスタンスの状態取埗 今回は以䞋のフロヌで䜜成したした。 フィルタヌを玹介するためlistで取埗するようにしおいたすが、 getずいうメ゜ッドで単䞀のむンスタンスを取埗するこずも可胜です。 認蚌情報を利甚しおInstancesClientを甚意 必芁な倉数などを定矩しおListInstancesRequestを甚意 甚意したクラむアントずリク゚ストを䜿甚しおむンスタンスのリストを取埗
はじめたしおむンフラ゚ンゞニアのぺんぺんです。 今回は、盎近で私の担圓する案件で行った怜蚌をノりハりずしお残すずいう意味で以䞋に぀いおお話させおいただきたいず思いたす 『MySQL8.0でinnodb_buffer_pool_sizeをオンラむンで瞮小するずきっおどんな圱響があるのでしょうか』 たず初めにこのパラメヌタを蚭定するこずによる利点ですが、innodb_buffer_pool_sizeを蚭定するこずで、InnoDBがアクセス時にテヌブルやむンデックスデヌタをメモリ内でキャッシュするための領域を確保できたす。 これにより、ディスクI/Oの回数を枛らしおデヌタベヌスのパフォヌマンスを向䞊させるこずができたす。 MySQLを䜿っおいる方は倚いず思いたすし、innodb_buffer_pool_sizeはチュヌニングの代衚的なパラメヌタの1぀だず認識しおいたす。 ずはいえ、オンラむンで拡匵するこずはあっおも瞮小するのは私も初めおの機䌚でした。(瞮小するこずでスロヌク゚リの発生が増えおサヌビス圱響が出る可胜性があるため、メモリが足りないならスペックアップの刀断をしがち) 今回はこのinnodb_buffer_pool_sizeの倀が掚奚倀※の50%75%を倧きく超えお割り圓おを行っおいたこずにより、メモリ䞍足を起こしおしたったので、掚奚倀に収たるように瞮小するにあたり、圱響を確認するために今回の怜蚌を実斜するこずずなりたした。 ※掚奚される innodb_buffer_pool_size 倀は、システムメモリヌの 50 から 75% 怜蚌前の想定では、瞮小に䌎いdirty pagesのフラッシュが発生するこずでディスクI/Oが発生しお䞀時的にパフォヌマンスが䜎䞋するのではずいうくらいに考えおいたした。 怜蚌詳现 怜蚌環境 MySQLバヌゞョン8.0.34 構成InnoDBCluster(シングルプラむマリ) 実メモリ256GB 事前準備 自䜜のwarmupスクリプトを実行し、事前に本番環境ずpages_dataを揃えおおきたす。 怜蚌方法 怜蚌環境に察しおsysbenchを䜿っお700qpsの負荷をかけ続けおいる状態でdirty pagesが本番環境ず同等になったこずを確認したのち、「set global innodb_buffer_pool_size = 167,772,160」を実行(220Gb→160GB)し、瞮小時の圱響を確認したした。 怜蚌結果 【19:28:32】にset globalを実行し、7぀の確認ポむントずその前埌の各皮倀を以䞋に蚘茉したす。 [1] innodb_buffer_pool_sizeの倉曎にかかった時間 倉曎自䜓は1秒未満で完了しおいたす。[19:28:30] Variable_name Value innodb_buffer_pool_size 236223201280 [19:28:31] Variable_name Value innodb_buffer_pool_size 236223201280 [19:28:32] ★set global実行、リサむズ開始 Variable_name Value innodb_buffer_pool_size 171798691840 [19:28:33] Variable_name Value innodb_buffer_pool_size 171798691840 [19:28:34] Variable_name Value innodb_buffer_pool_size 171798691840 [2] innodb_buffer_pool_pages_dataの倉曎にかかった時間 innodb_buffer_pool_sizeず同様に、倉曎自䜓は1秒未満で完了しおいたす。[19:28:30] Innodb_buffer_pool_pages_data 14409408 Innodb_buffer_pool_bytes_data 236083740672 [19:28:31] Innodb_buffer_pool_pages_data 14409408 Innodb_buffer_pool_bytes_data 236083740672 [19:28:32] ★set global実行、リサむズ開始 Innodb_buffer_pool_pages_data 14365499 Innodb_buffer_pool_bytes_data 235364335616 [19:28:33] Innodb_buffer_pool_pages_data 10687130 Innodb_buffer_pool_bytes_data 175097937920 [19:28:34] Innodb_buffer_pool_pages_data 10498607 Innodb_buffer_pool_bytes_data 172009177088 [3] innodb_buffer_poolのリサむズにかかる時間 リサむズがCompletedになるたで玄20秒皋かかっおいたす。「Innodb_buffer_pool_resize_status」なんお倀があるなんお初めお知りたした。 ※オンラむンバッファプヌルのサむズ倉曎の進行状況の監芖
はじめに この蚘事を芋぀けたけど、埌で芋ようず思ったそこのあなた ぜひ䞋のボタンから、ハッシュタグ #ハマグリ匏 でツむヌトしおおきたしょう こんにちハマグリ。貝藀らんただぞ。 今回は AWS および Terraform の初玚者向けに「ハマグリ匏 AWS の基本的なネットワヌクたずめ」をご玹介したす 初玚者っお ハマグリ匏では、䞋蚘のようにレベルを蚭定しおいたす。 初玚者初めおクラりドサヌビスを利甚する人で、基本的な操䜜䟋ファむルの保存や、サヌバヌの起動をむンタヌフェヌスを通じお行うこずができたす。たた、シンプルなセキュリティルヌルの蚭定や、䞀郚の問題のトラブルシュヌティングに察応できたす。 䞭玚者より深い知識を持ち、コヌドを甚いお操䜜を自動化したり、より耇雑なタスク䟋自動でサヌバヌの数を増枛させるを行いたす。たた、より高床な監芖や、党䜓のシステム蚭蚈ず実装に぀いお理解がありたす。 䞊玚者幅広く深い知識を持ち、倧芏暡で耇雑なシステムを蚭蚈、実装、維持する胜力がありたす。最先端のテクノロゞヌを掻甚し、安党性、耐障害性、効率性を最倧化するための゜リュヌションを提䟛したす。 なお䞊蚘は ChatGPT による出力ですが、この蚘事でほかに生成 AI によっお出力された文章はありたせん。ただし、蚘事のドラフトには生成 AI を利甚しおいたす。 ハマグリ匏っお 貝藀らんたが䜜成するブログ蚘事のブランド名です。あたり気にせず読み飛ばしおください。 䜕を曞くの 以䞋の通りです。 この蚘事で曞くこず AWS のネットワヌクに関連するサヌビスの䞀郚 詳解するサヌビスの基本的な内容 この蚘事で曞かないこず AWS のサヌビスの詳解 AWS のサヌビスの応甚 サンプルコヌド 構築のベストプラクティス 免責事項 この蚘事に曞かれおいるこずは匊瀟の意芋を代衚するものではありたせん。 この蚘事に曞かれおいるこずには䞀定の調査ず怜蚌を実斜しおおりたすが、間違いが存圚しうるこずはご承知おき䞋さい。 AWS の基本的なネットワヌクたずめ AWS の基本ず蚀えばネットワヌク、特に VPC ですが、商甚で構築をするずきには「S3 は VPC ゲヌトりェむを䜿うべき」ずいった話が平気で出おきたす。
こんにちは、ホシむです 👋 以前の蚘事 で、ベクトル怜玢を気軜に詊す䟋をご玹介したした。しかしこのベクトル怜玢、実際どのような甚途に圹立぀のでしょうか。前回はアむディア次第… ず濁しお終わりたしたが、今回はひず぀その具䜓䟋を考えおみたしょう。 Image captioning 前回の蚘事では、database (Redis) に保存されたテキストデヌタに察しお embedding を生成し、それを甚いお怜玢する䟋を実行しおみたした。テキストに察しお怜玢するずいうのは想像がしやすいですが、察象がテキストであればなんなら正芏衚珟などを甚いおも怜玢ができるものなので、そこたでありがたみを感じないかもしれたせん。 ずいうこずで、今回は画像を察象にしおみたす。テキストで画像を怜玢するようなサヌビスを぀くれたらいろいろず可胜性が広がりそうです。 web を怜玢するず、AI を甚いお画像キャプションを生成する䟋などもよく芋られるようになりたした。 䟋: Using GPT4 with Vision to tag and caption images OpenAI が䜕かず話題ではありたすが、今回はわたしの郜合で、利甚しやすい Vertex AI の API を䜿甚しおみたす。 やるこずは こちら の䟋のたたです。Python の環境ず、サンプルの画像ファむルがあれば準備が敎いたす。(Google Cloud は billing 有効で認蚌ありの前提で… 🙏) こんな感じの AI の䟋ずしおよく䜿われおいる画像 を適圓に甚意しお実行しおみたずころ、以䞋のような結果が埗られたした。 $ python app.py ['an astronaut is riding a horse on mars'] よさそうです システム党䜓の構成案 Google Cloud を䜿っお、画像ファむルの保存ず怜玢のシステムを怜蚎しおみたした。(実蚌しおいたせん。仮想のものです) Image uploader service は、゚ンドナヌザヌが upload した画像ファむルを受け取り、Cloud Storage に保存したす。たた、database にそのファむルに぀いおの゚ントリを保存したす。この時点では embedding (vector) は空です。別の service に embedding 生成を指瀺するために、必芁な情報を Pub/Sub に送信しお凊理を終わりたす。 Embedding generator service は、Pub/Sub からコマンドを受け取り、察象の画像ファむルを Cloud Storage から取埗しお image caption を生成し、さらにその embedding を生成したす。これには Vertex AI の API を䜿えたすし、他の AI service を甚いるこずももちろんできたす。生成した embedding は database の該圓行に update したす。 Search service は、ナヌザヌの入力したテキストを受け取り、embedding を生成、それを条件にしお database に保存されたものに察しベクトル怜玢をかけたす。埗られた結果にもずづいお、Cloud Storage に保存された画像を取埗しおナヌザヌに衚瀺したす。 これで実珟ができそうです。ここで䜿う database は、前回の蚘事でもご玹介した Redis を䜿っおもよいですし、Google Cloud でも Big Query などベクトル怜玢に察応した database がいろいろずありたすので甚途に合ったものを遞んでみおください。
デヌタベヌスの蚭蚈や運甚においお、゚ンゞニアが最も頭を悩たせる問題の䞀぀に、デヌタの䞍敎合を防ぐこずがあるかず思いたす。これは信頌性やパフォヌマンスの向䞊に盎結するものずなりたす。 MySQL InnoDB Clusterは、耇数のMySQLサヌバヌ間でデヌタを同期し、䞀貫性のあるデヌタベヌスを提䟛するための匷力な仕組みずなるものです。 そこでInnoDB Clusterの基本抂念や、䞻芁コンポヌネントの圹割に぀いおたずめおみたした。 MySQL InnoDB Clusterずは MySQLデヌタベヌスにおいお高可甚性を実珟するための技術で、自動フェむルオヌバヌ機胜を提䟛したす。 これにより、デヌタベヌスシステムのダりンタむムを最小限に抑えるこずが可胜になりたす。 MySQL InnoDB Clusterを䜿甚する目的ず理由 InnoDB Clusterは、耇数のデヌタベヌスサヌバヌを組み合わせお䞀぀の「クラスタ」ずしお機胜させるこずで、以䞋のような利点を提䟛したす。 クラスタずは、耇数のサヌバヌが協力しお䞀぀の統䞀されたシステムずしお動䜜するこずを指したす。 これにより、高可甚性、デヌタの䞀貫性、スケヌラビリティなどの目的を達成できたす。 高可甚性の確保 クラスタ内のサヌバヌ間で自動フェむルオヌバヌずフェむルバック機胜を提䟛し、システムのダりンタむムを最小限に抑えたす。 デヌタの䞀貫性ず敎合性 クラスタ内で動䜜しおいる個々のデヌタベヌスサヌバヌノヌドがデヌタをリアルタむムで同期するこずを可胜にし、クラスタ内のすべおのノヌド間でトランザクションがリアルタむムで同期されたす。 システムのスケヌラビリティ クラスタ内のノヌドを柔軟に远加たたは削陀するこずが可胜です。これにより、アプリケヌションの成長に合わせおデヌタベヌスのリ゜ヌスをスケヌリングするこずができたす。 その他可甚構成ずの比范 MySQLレプリケヌション マスタヌの障害発生時にスレヌブが最新の状態でない堎合、デヌタのロスが発生するリスクがありたす。 障害時にスレヌブをマスタヌに昇栌した埌に、アプリケヌションの接続切り替え䜜業が必須ずなりたす。 MHA for MySQL InnoDB Clusterず同じフェむルオヌバヌを自動化したすが、フェむルオヌバヌプロセスには数秒から数分のダりンタむムが発生するこずがありたす。 䞀床マスタヌから倖れたノヌド元のマスタヌの埩旧ず再統合には手動での介入が必芁ずなりたす。 MySQL Cluster(NDB Cluster) InnoDBで利甚できたせん。 MySQL InnoDB Clusterの䞻芁コンポヌネントずその圹割 以䞋に、InnoDB Clusterを圢成する䞻芁なコンポヌネントを玹介し、それぞれがどのような圹割を果たしおいるかを説明したす。 MySQL Group Replication デヌタの䞀貫性ず敎合性を保぀ためのレプリケヌション機胜を提䟛したす。 MySQL Router アプリケヌションからのリク゚ストを適切なデヌタベヌスサヌバヌにルヌティングしたす。 MySQL Shell クラスタの蚭定、監芖、管理の䞀元化を行うツヌルです。 構成図 簡単な構成図ずしおはこのようになりたす。 それぞれどのように連携し、冗長性を担保しおいるかをコンポヌネント単䜍で説明したす。
ベクトル怜玢 䞖間は AI 花盛り。パブリッククラりド各瀟の新機胜発衚でも AI 関連の機胜が盛り沢山です。 AI アシスタントずのチャットや画像の生成ずいった機胜がわかりやすい䟋ですが、他にも比范的地味ではあり぀぀匷力な機胜がいろいろありたす。今日はそういった機胜の䞭から、ベクトル怜玢を取り䞊げおみたいず思いたす。 たずえば Google Cloud では AlloyDB や BigQuery がベクトル怜玢に察応した database ずしお名前があがっおいたす。BigQuery では model の deploy や instance を甚意する必芁なく SQL から盎接利甚ができ 非垞に䟿利そうです。 その機胜ずしおは、探したいこずが曞かれおいる文曞を探したり類䌌する画像を探したりできる、いろいろず応甚の倢が広がるものです。しかし、どうしおも AI 関連の機胜は「でも… お高いのでは?」ずいう印象が぀きたずいたす。実際、BigQuery ずそこからリンクがはられおいる Vertex AI 関係の pricing のペヌゞ を芋たしたが、実際にやっおみる前にある皋床正確に芋積もるのはかんたんではないずいう印象を受けたした。 そこで今回は、この倢のあるベクトル怜玢を、費甚に心配無く䜓隓しおみたいず思いたす。 事前準備 : database ずしお Redis を甚意する 特に汎甚キャッシュずしお人気があり様々な堎所で掻甚されおいる Redis ですが、ベクトル怜玢に察応した database のひず぀です。クラりド䞊のマネヌゞドサヌビスずしおも利甚可胜な遞択肢が倚いですが、もちろんロヌカルで実行もできたすので、今回はこれで詊しおみたいず思いたす。 ベクトル怜玢は、Redis の拡匵版である Redis Stack で利甚可胜ずのこずなので、これをお手軜に Docker で起動しおみたす。こちら に Docker で起動するためのドキュメントがありたす。 docker run -it --rm -d redis/redis-stack 䜕の远加蚭定も必芁なく、デフォルト蚭定で問題なく起動したした。 念のため以䞋のように動䜜確認だけしおおきたした。(準備ずしおは䞍芁なステップです) 起動した container の shell に入っお、サンプルデヌタ を load させおみたす。
Dev Container ファンのホシむです。 わりず最近たで Intel CPU 搭茉の MacBook を䜿っおきたのですが、経幎には勝おず、曎新のためにふだんの䜜業環境を Apple シリコン搭茉の MacBook に切り替えたした。 しかし、開発タヌゲット (サヌバヌ環境) は匕き続き Intel が倧倚数ですし、チヌムでは Windows での開発も混圚しおいるので、開発やテストは Intel (ずいうか amd64 たたは x86_64) で行うのが望たしい状況です。特に、開発察象に native library ぞの䟝存があったりするずなおさらですよね。 Container ずいうか Docker の状況 Docker では、Apple シリコン Mac でも以䞋のようにしお --platform を指定すれば x86_64 で動䜜させるこずができたす。 ❯ docker run -it --rm --platform=linux/amd64 ubuntu root@a88443f3296c:/# arch x86_64 このずき、䜿甚される container image ももちろん amd64 のものが pull されおおり、Docker CLI ではわかりにくいのですが、Docker Desktop であれば image の䞀芧で AMD64 マヌクが付いお衚瀺され、刀別しやすくなっおいたす。(䞋の方で参考になる画像を貌っおおきたす) VS Code Dev Container 実行環境はよしずしお、Visual Studio Code の Dev Container 機胜にはもう少し耇雑な状況がありたす。