RPCの基礎と核心技術
RPCとは何か
RPC(Remote Procedure Call)は、ネットワークを通じて遠隔地のコンピュータプログラムからサービスを要求するためのプロトコルです。低レベルのネットワーク技術を意識することなく利用できます。RPCプロトコルはTCPやUDPなどの伝送プロトコルの存在を前提としており、通信プログラム間で情報を伝達します。OSI通信モデルにおいて、RPCは伝送層とアプリケー ...
9月26日 22:04 投稿
Dubbo と Zookeeper を利用した XML 設定による RPC システム構築
1. プロジェクト構成(Maven マルチモジュール)
本構成では、Maven のマルチモジュールプロジェクトを採用し、API、Provider、Consumer の 3 つのモジュールに分割します。これにより、依存関係の明確化とビルドの効率化を図ります。
2. 親 POM 設定
ルートプロジェクトの POM ファイルでは、共通の依存ライブラリとプロパティを定義します。Dubbo、Zookeeper、Spring Fr ...
9月19日 03:33 投稿
DubboサービスとSpringトランザクションおよびAOPを使用した動的データソースの切り替えに関する問題
問題の説明と分析
プロジェクトではSpringを用いてデータソースを動的に切り替えており、サービスにはDubboを使用しています。しばらく動作させた後、プログラムが異常になり、更新操作が主データベースに切り替わらない現象が発生しました。
この問題は、最初に読み取り操作を行い、その後書き込み操作を行う場合に発生します。
ログ分析の結果、以下の原因が考えられま ...
8月10日 23:52 投稿
Dubbo REST APIでの絵文字のフィルタリング実装
Dubboを使用したREST APIを開発中に、ユーザーが入力するデータに絵文字が含まれているとMySQLのUTF-8エンコーディングの問題でエラーが発生しました。これを解決するために、絵文字を検出しブロックするフィルタリングロジックを実装しました。
この問題に対処するために、emoji-javaというオープンソースライブラリを利用しました。
Maven依存性追加
<dependency>
...
7月10日 16:14 投稿
Dubbo の自動再試行機能とその問題点—— framework design の観点から
Dubbo は、デフォルトで 再試行(retry)機能 を備えています。これは、クライアント側のタイムアウトや lokale エラー発生時に、複数回の呼び出しを自動的に試みる設計です。しかし、実装の背景にある設計思想と実際の運用におけるリスクのバランスには、注意すべき重要な点があります。特に、非冪等な操作に対して誤って再試行を許可してしまうと、データの重複挿入や状 ...
6月29日 18:12 投稿
ユーザー機能実装ガイド:いいね、設定、ブラックリスト管理
機能概要
いいね機能の実装
ユーザー共通設定機能
ブラックリスト機能
電話番号変更機能
1. いいね統計表示
1.1 基本概念
いいね:他のユーザーに対する評価(例:AがBにいいねしても、BがAにいいねしたとは限らない)
フォロワー:自分をいいねしたユーザー
相互フォロー:お互いにいいねした状態
1.2 Dubboサービス
//UserLikeApi.java
public interface UserLikeApi ...
6月13日 00:46 投稿
CompletableFutureのget()メソッドに潜む性能問題について
Dubboのソースコードを調査していた際、興味深い実装箇所を見つけました。
org.apache.dubbo.rpc.protocol.AbstractInvoker#waitForResultIfSync
このメソッド内では、CompletableFutureのget(long, TimeUnit)が呼び出されており、タイムアウト値としてInteger.MAX_VALUEが指定されています。一見すると、単純なget()メソッドを使用するのと同等に見えます。
ではなぜ、無 ...
5月22日 21:47 投稿