compose: update readme and add compose file

This commit is contained in:
singchia
2024-05-28 23:38:31 +08:00
parent 21d56e79c6
commit e447d7e733
3 changed files with 144 additions and 19 deletions

119
README.md
View File

@@ -7,12 +7,12 @@ Frontier是一个go开发的开源长连接网关能让微服务直接连通
## 特性
- **RPC**远程过程调用微服务可以直接Call到边缘节点的注册函数同样的边缘节点也可以Call到微服务的注册函数并且在微服务侧支持负载均衡。
- **消息**发布和接收微服务可以直接Publish到边缘节点的topic同样的边缘节点也可以Publish到微服务的topic或外部消息队列的topic微服务侧的topic支持负载均衡。
- **消息**发布和接收微服务可以直接Publish到边缘节点的topic同样的边缘节点也可以Publish到微服务的topic或外部消息队列的topic微服务侧的topic支持负载均衡。
- **多路复用**(点到点拨通);微服务可以直接在边缘节点上打开一个新流(连接),你可以在这个新连接上封装例如流读写、拷贝文件、代理等,天堑变通途。
- **上线离线控制**边缘节点微服务可以注册边缘节点获取ID、上线和下线回调当边缘节点请求ID、上线或者离线时Frontier会调用这个回调。
- **API简单**SDK提供在项目的api目录下分别对边缘和微服务提供了封装好的sdk你可以非常简单和轻量的基于这个sdk做开发。
- **部署简单**支持多种部署方式如docker、docker-compose、k8s-helm以及operator来部署和管理你的Frontier实例。
- **水平扩展**提供了Frontiter和Frontlas集群在单实例性能达到瓶颈下可以水平扩展Frontier实例。
- **部署简单**支持多种部署方式如docker、docker-compose、k8s-helm以及operator来部署和管理你的Frontier实例或集群
- **水平扩展**提供了Frontiter和Frontlas集群在单实例性能达到瓶颈下可以水平扩展Frontier实例或集群
- **高可用**Frontlas具有集群视角你可以使用微服务和边缘节点永久重连的sdk在当前Frontier宕机情况下新选择一个可用Frontier实例继续服务。
## 架构
@@ -22,16 +22,26 @@ Frontier是一个go开发的开源长连接网关能让微服务直接连通
<img src="./docs/diagram/frontier.png" width="100%" height="100%">
- Service End微服务侧的功能入口
- Service End微服务侧的功能入口,默认连接
- Edge End边缘节点或客户端侧的功能入口
- Publish/Receive发布和接收消息
- Topic发布和接收消息的主题
- Call/Register调用和注册函数
- Method调用和注册的函数名
- OpenStream/AcceptStream打开和接收点到点连接
- OpenStream/AcceptStream打开和接收点到点流(连接
Frontier需要微服务和边缘节点两方都主动连接到Frontier这种设计的优势在不需要Frontier主动连接任何一个地址Service和Edge的元信息可以在连接的时候携带过来。连接的默认端口是
- 30011提供给微服务连接获取Service
- 30012提供给边缘节点连接获取Edge
- 30010提供给运维人员或者程序使用的控制面
详情见部署章节
## 使用
### Service
**微服务侧获取Service**
@@ -42,11 +52,11 @@ package main
import "github.com/singchia/frontier/api/dataplane/v1/service"
func main() {
dialer := func() (net.Conn, error) {
return net.Dial("tcp", "127.0.0.1:30011")
}
svc, err := service.NewService(dialer)
// 开始使用service
dialer := func() (net.Conn, error) {
return net.Dial("tcp", "127.0.0.1:30011")
}
svc, err := service.NewService(dialer)
// 开始使用service
}
```
@@ -176,23 +186,81 @@ func main() {
}
```
### 控制面
Frontier控制面提供gRPC和rest接口运维人员可以使用这些api来确定本实例的连接情况定义在
> api/controlplane/frontier/v1/controlplane.proto
```protobuffer
service ControlPlane {
// 列举所有边缘节点
rpc ListEdges(ListEdgesRequest) returns (ListEdgesResponse)
{ option(google.api.http) = { get: "/v1/edges"}; };
// 获取边缘节点详情
rpc GetEdge(GetEdgeRequest) returns (Edge)
{ option(google.api.http) = { get: "/v1/edges/{edge_id}"}; };
// 踢除某个边缘节点下线
rpc KickEdge(KickEdgeRequest) returns (KickEdgeResponse)
{ option(google.api.http) = { delete: "/v1/edges/{edge_id}"}; };
// 列举边缘节点注册的RPC
rpc ListEdgeRPCs(ListEdgeRPCsRequest) returns (ListEdgeRPCsResponse)
{ option(google.api.http) = { get: "/v1/edges/rpcs"}; };
// 列举所有微服务
rpc ListServices(ListServicesRequest) returns (ListServicesResponse)
{ option(google.api.http) = { get: "/v1/services"}; };
// 获取微服务详情
rpc GetService(GetServiceRequest) returns (Service)
{ option(google.api.http) = { get: "/v1/services/{service_id}"}; };
// 提出某个微服务下线
rpc KickService(KickServiceRequest) returns (KickServiceResponse)
{ option(google.api.http) = { delete: "/v1/services/{service_id}"}; };
// 列举微服务注册的RPC
rpc ListServiceRPCs(ListServiceRPCsRequest) returns (ListServiceRPCsResponse)
{ option(google.api.http) = { get: "/v1/services/rpcs"}; };
// 列举微服务接收的Topic
rpc ListServiceTopics(ListServiceTopicsRequest) returns (ListServiceTopicsResponse)
{ option(google.api.http) = { get: "/v1/services/topics"}; };
}
```
Swagger文档请见[swagger](./docs/swagger/swagger.yaml)
**注意**
当你配置dao backend使用sqlite3时count才会返回总数默认使用buntdb为性能考虑这个值返回-1
### 示例
本仓库携带了一个ICLM(Iteractive command-line messaging)示例,可以通过
```
make examples
```
在bin目录下得到```iclm_service```和```iclm_edge```的可执行程序,以下是运行示例:
## 配置
### TLS
## 部署
### 默认端口
- 30011提供给微服务连接获取Service的端口
- 30012提供给边缘节点连接获取Edge的端口
- 30010提供给运维人员或者程序使用的控制面端口
### docker
```
docker run -d --name frontier -p 30011:30011 -p 30012:30012 singchia/frontier:1.0.0
```
然后你可以使用上面所说的iclm示例来测试功能性
### docker-compose
```
git clone https://github.com/singchia/frontier.git
cd dist/compose
docker-compose up -d frontier
```
@@ -202,14 +270,25 @@ func main() {
```
## 集群
### Frontier + Frontlas架构
<img src="./docs/diagram/frontlas.png" width="100%" height="100%">
- Frontier最小的Frontier部署实例
- Frontlas同步到
## 参与开发
### 高可用
## k8s
### Operator
## 开发
### Bug和Feature
如果你发现任何Bug请提出Issue项目Maintainers会及时响应相关问题。
@@ -219,6 +298,10 @@ func main() {
* 每次提交一个Feature
* 提交的代码都携带单元测试
### 路线图
祥见 [ROADMAP](./ROADMAP.md)
## 许可证
Released under the [Apache License 2.0](https://github.com/singchia/geminio/blob/main/LICENSE)