增加拆分服务文档
This commit is contained in:
2
.idea/jsLibraryMappings.xml
generated
2
.idea/jsLibraryMappings.xml
generated
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="JavaScriptLibraryMappings">
|
<component name="JavaScriptLibraryMappings">
|
||||||
<file url="PROJECT" libraries="{prism-php, search, vue}" />
|
<file url="PROJECT" libraries="{docsify-mermaid, docsify-plantuml, mermaid, prism-php, search, vue}" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
3
.idea/jsonrpc-docs.iml
generated
3
.idea/jsonrpc-docs.iml
generated
@ -11,5 +11,8 @@
|
|||||||
<orderEntry type="library" name="vue" level="application" />
|
<orderEntry type="library" name="vue" level="application" />
|
||||||
<orderEntry type="library" name="prism-php" level="application" />
|
<orderEntry type="library" name="prism-php" level="application" />
|
||||||
<orderEntry type="library" name="search" level="application" />
|
<orderEntry type="library" name="search" level="application" />
|
||||||
|
<orderEntry type="library" name="docsify-plantuml" level="application" />
|
||||||
|
<orderEntry type="library" name="mermaid" level="application" />
|
||||||
|
<orderEntry type="library" name="docsify-mermaid" level="application" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
* **开始接入**
|
* **开始接入**
|
||||||
* [开发规范]()
|
* [开发规范]()
|
||||||
|
* [服务拆分](zh-cn/service_splitting)
|
||||||
* [关于](about)
|
* [关于](about)
|
||||||
* [对接指南](zh-cn/guide)
|
* [对接指南](zh-cn/guide)
|
||||||
* **Ai服务模块**
|
* **Ai服务模块**
|
||||||
|
10
index.html
10
index.html
@ -25,6 +25,9 @@
|
|||||||
alias: {
|
alias: {
|
||||||
'/.*/_sidebar.md': '/_sidebar.md'
|
'/.*/_sidebar.md': '/_sidebar.md'
|
||||||
},
|
},
|
||||||
|
mermaidConfig: {
|
||||||
|
querySelector: ".mermaid"
|
||||||
|
},
|
||||||
|
|
||||||
search: {
|
search: {
|
||||||
maxAge: 86400000, // 过期时间,单位毫秒,默认一天
|
maxAge: 86400000, // 过期时间,单位毫秒,默认一天
|
||||||
@ -52,5 +55,12 @@
|
|||||||
<script src="//cdn.jsdelivr.net/npm/docsify@4"></script>
|
<script src="//cdn.jsdelivr.net/npm/docsify@4"></script>
|
||||||
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-php.min.js"></script>
|
<script src="//cdn.jsdelivr.net/npm/prismjs@1/components/prism-php.min.js"></script>
|
||||||
<script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/search.min.js"></script>
|
<script src="//cdn.jsdelivr.net/npm/docsify/lib/plugins/search.min.js"></script>
|
||||||
|
|
||||||
|
<script type="module">
|
||||||
|
import mermaid from "https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs";
|
||||||
|
mermaid.initialize({ startOnLoad: true });
|
||||||
|
window.mermaid = mermaid;
|
||||||
|
</script>
|
||||||
|
<script src="//unpkg.com/docsify-mermaid@2.0.1/dist/docsify-mermaid.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
122
zh-cn/service_splitting.md
Normal file
122
zh-cn/service_splitting.md
Normal file
@ -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: 管理服务注册<br/>和健康检查
|
||||||
|
|
||||||
|
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. 内置支持负载均衡(随机、轮询等)和容错(失败重试、熔断等)。
|
||||||
|
|
||||||
|
---
|
Reference in New Issue
Block a user