diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml index 4efe3b5..f95c77c 100644 --- a/.idea/jsLibraryMappings.xml +++ b/.idea/jsLibraryMappings.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/jsonrpc-docs.iml b/.idea/jsonrpc-docs.iml index 50d15f7..41ff518 100644 --- a/.idea/jsonrpc-docs.iml +++ b/.idea/jsonrpc-docs.iml @@ -11,5 +11,8 @@ + + + \ No newline at end of file diff --git a/_sidebar.md b/_sidebar.md index 01e92a6..29b5a14 100644 --- a/_sidebar.md +++ b/_sidebar.md @@ -2,6 +2,7 @@ * **开始接入** * [开发规范]() + * [服务拆分](zh-cn/service_splitting) * [关于](about) * [对接指南](zh-cn/guide) * **Ai服务模块** diff --git a/index.html b/index.html index fbc7a1a..241814a 100644 --- a/index.html +++ b/index.html @@ -25,6 +25,9 @@ alias: { '/.*/_sidebar.md': '/_sidebar.md' }, + mermaidConfig: { + querySelector: ".mermaid" + }, search: { maxAge: 86400000, // 过期时间,单位毫秒,默认一天 @@ -52,5 +55,12 @@ + + + diff --git a/zh-cn/service_splitting.md b/zh-cn/service_splitting.md new file mode 100644 index 0000000..f14e065 --- /dev/null +++ b/zh-cn/service_splitting.md @@ -0,0 +1,122 @@ +# 服务拆分 + +> 项目拆分为 **公共服务** 和 **对外接口服务**:主要逻辑提供对外接口服务,公共服务提供基础服务(如微信接口服务、权限服务、用户服务等)。 + +### 为什么要拆分? + +1. **提高可维护性**:拆分为较小服务(公共服务、对外接口服务等)使代码库清晰易管理,每个服务职责明确,减少复杂度,便于维护和更新。 +2. **增强扩展性**:服务可独立扩容,例如微信接口服务负载增加时可单独扩容,而不影响其他服务。 +3. **简化部署过程**:小型服务更易于部署,可更快发布新功能和修复 bug,降低整体风险。 +4. **提升容错能力**:服务隔离,一个服务出错不会轻易影响其他服务。 +5. **促进团队协作**:不同团队/成员可专注于不同服务并行开发,效率更高,也可选择最合适的技术栈。 +6. **优化资源利用**:按服务需求分配资源(CPU/内存),提高资源利用率,降低成本。 + +--- + +## 整体架构图 + +> 使用时序图直观展示服务拆分与通信关系: + +```mermaid +sequenceDiagram + participant Client as HTTP API 接口 + participant User as 用户服务 + participant Perm as 权限服务 + participant WeChat as 微信服务 + participant Nacos as 注册中心 + + Client->>User: JSON-RPC 请求 + Client->>Perm: JSON-RPC 请求 + Client->>WeChat: JSON-RPC 请求 + + loop 服务注册/发现 + User->>Nacos: 注册/发现 + Perm->>Nacos: 注册/发现 + WeChat->>Nacos: 注册/发现 + end + + Note right of Nacos: 管理服务注册
和健康检查 + + User-->>Client: 返回用户数据 + Perm-->>Client: 返回权限数据 + WeChat-->>Client: 返回微信数据 +``` + +--- + +## 核心组件说明 + +| 组件 | 作用 | +|------|------| +| **Nacos** | 服务注册与发现中心,管理服务实例和健康检查 | +| **JSON-RPC** | 轻量级服务间通信协议,结构清晰,跨语言调用友好 | +| **Hyperf** | 高性能协程框架,提供 RPC 客户端/服务端及服务治理能力 | + +--- + +## 实现步骤详解 + +### 1️⃣ 安装依赖 + +```bash +composer require hyperf/json-rpc +composer require hyperf/rpc-server +``` + +--- + +### 2️⃣ 启动 Nacos 服务注册中心 + +可使用 Docker 快速启动: + +```bash +docker run -d -p 8848:8848 --name nacos nacos/nacos-server +# 访问 http://localhost:8848/nacos 查看服务注册情况 +``` + +--- + +### 3️⃣ 创建服务提供者 + +#### 定义接口(Interface) + +```php +// app/Service/UserServiceInterface.php +namespace App\Service; + +interface UserServiceInterface +{ + public function getUserById(int $id): array; +} +``` + +#### 实现接口逻辑 + +```php +// app/Service/Impl/UserServiceImpl.php +namespace App\Service\Impl; + +use App\Service\UserServiceInterface; + +class UserServiceImpl implements UserServiceInterface +{ + public function getUserById(int $id): array + { + // 模拟数据库查询 + return ['id' => $id, 'name' => '张三']; + } +} +``` + +--- + +## 服务注册与发现流程 + +1. 公共服务启动后,通过 **JsonRpcServer** 在指定端口监听; +2. 并向 **Nacos** 注册服务名(如 `App\Service\UserServiceInterface`)和地址; +3. 对外接口服务启动后,从 **Nacos** 获取所需服务地址; +4. 通过 Hyperf 内置 **JSON-RPC 客户端** 调用远程方法; +5. 调用过程自动完成 JSON-RPC 协议序列化/反序列化; +6. 内置支持负载均衡(随机、轮询等)和容错(失败重试、熔断等)。 + +---