You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardexpand all lines: README.md
+13-13
Original file line number
Diff line number
Diff line change
@@ -29,17 +29,17 @@
29
29
30
30
**Aeraki**[Air-rah-ki] is the Greek word for 'breeze'. While service mesh becomes an important infrastructure for microservices, many(if not all) service mesh implementations mainly focus on HTTP protocols and treat other protocols as plain TCP traffic. Aeraki Mesh is created to provide a non-intrusive, highly extendable way to manage any layer-7 traffic in a service mesh.
31
31
32
-
Note: Aeraki only handles none-HTTP layer-7 traffic in a service mesh, and leaves the HTTP traffic to other existing service mesh projects. (As they have already done a very good job on it, and we don't want to reinvent the wheel! )
32
+
Note: Aeraki only handles non-HTTP layer-7 traffic in a service mesh, and leaves the HTTP traffic to other existing service mesh projects. (As they have already done a very good job on it, and we don't want to reinvent the wheel! )
33
33
Aeraki currently can be integrated with Istio, and it may support other service mesh projects in the future.
34
34
35
35
## Problems to solve
36
36
37
37
We are facing some challenges in service meshes:
38
-
* Istio and other popular service mesh implementations have very limited support for layer7 protocols other than HTTP and gRPC.
38
+
* Istio and other popular service mesh implementations have very limited support for layer-7 protocols other than HTTP and gRPC.
39
39
* Envoy RDS(Route Discovery Service) is solely designed for HTTP. Other protocols such as Dubbo and Thrift can only use listener in-line routes for traffic management, which breaks existing connections when routes change.
40
40
* It takes a lot of effort to introduce a proprietary protocol into a service mesh. You’ll need to write an Envoy filter to handle the traffic in the data plane, and a control plane to manage those Envoy proxies.
41
41
42
-
Those obstacles make it very hard, if not impossible, for users to manage the traffic of other widely-used layer7 protocols in microservices. For example, in a microservices application, we may have the below protocols:
42
+
Those obstacles make it very hard, if not impossible, for users to manage the traffic of other widely-used layer-7 protocols in microservices. For example, in a microservices application, we may have the below protocols:
@@ -52,17 +52,17 @@ If you have already invested a lot of effort in migrating to a service mesh, of
52
52
53
53
## Aeraki's approach
54
54
55
-
To address these problems, Aeraki Mesh providing a non-intrusive, extendable way to manage any layer7 traffic in a service mesh.
55
+
To address these problems, Aeraki Mesh provides a non-intrusive, extendable way to manage any layer-7 traffic in a service mesh.
56
56

57
57
58
58
As this diagram shows, Aeraki Mesh consists of the following components:
59
59
60
60
* Aeraki: [Aeraki](https://github.com/aeraki-mesh/aeraki) provides high-level, user-friendly traffic management rules to operations, translates the rules to envoy filter configurations, and leverages Istio’s `EnvoyFilter` API to push the configurations to the sidecar proxies. Aeraki also serves as the RDS server for MetaProtocol proxies in the data plane. Contrary to Envoy RDS, which focuses on HTTP, Aeraki RDS is aimed to provide a general dynamic route capability for all layer-7 protocols.
61
-
* MetaProtocol Proxy: [MetaProtocol Proxy](https://github.com/aeraki-mesh/meta-protocol-proxy) provides common capabilities for Layer-7 protocols, such as load balancing, circuit breaker, routing, rate limiting, fault injection, and auth. Layer-7 protocols can be built on top of MetaProtocol. To add a new protocol into the service mesh, the only thing you need to do is implementing the [codec interface](https://github.com/aeraki-mesh/meta-protocol-proxy/blob/ac788327239bd794e745ce18b382da858ddf3355/src/meta_protocol_proxy/codec/codec.h#L118) and a couple of lines of configuration. If you have special requirements which can’t be accommodated by the built-in capabilities, MetaProtocol Proxy also has an application-level filter chain mechanism, allowing users to write their own layer-7 filters to add custom logic into MetaProtocol Proxy.
61
+
* MetaProtocol Proxy: [MetaProtocol Proxy](https://github.com/aeraki-mesh/meta-protocol-proxy) provides common capabilities for Layer-7 protocols, such as load balancing, circuit breaker, routing, rate limiting, fault injection, and auth. Layer-7 protocols can be built on top of MetaProtocol. To add a new protocol into the service mesh, the only thing you need to do is to implement the [codec interface](https://github.com/aeraki-mesh/meta-protocol-proxy/blob/ac788327239bd794e745ce18b382da858ddf3355/src/meta_protocol_proxy/codec/codec.h#L118) and a couple of lines of configuration. If you have special requirements which can’t be accommodated by the built-in capabilities, MetaProtocol Proxy also has an application-level filter chain mechanism, allowing users to write their own layer-7 filters to add custom logic into MetaProtocol Proxy.
62
62
63
63
[Dubbo](https://github.com/aeraki-mesh/meta-protocol-proxy/tree/master/src/application_protocols/dubbo) and [Thrift](https://github.com/aeraki-mesh/meta-protocol-proxy/tree/master/src/application_protocols/thrift) have already been implemented based on MetaProtocol. More protocols are on the way. If you're using a close-source, proprietary protocol, you can also manage it in your service mesh simply by writing a MetaProtocol codec for it.
64
64
65
-
Most request/response style, stateless protocols can be built on top of the MetaProtocol Proxy. However, some protocols' routing policies are too "special" to be normalized in MetaProtocol. For example, Redis proxy uses a slot number to map a client query to a specific Redis server node, and the slot number is computed by the key in the request. Aeraki can still manage those protocols as long as there's an available Envoy Filter in the Envoy proxy side. Currently, for protocols in this category, [Redis](https://github.com/aeraki-mesh/aeraki/blob/master/docs/zh/redis.md) and Kafka are supported in Aeraki.
65
+
Most request/response style, stateless protocols can be built on top of the MetaProtocol Proxy. However, some protocols' routing policies are too "special" to be normalized in MetaProtocol. For example, the Redis proxy uses a slot number to map a client query to a specific Redis server node, and the slot number is computed by the key in the request. Aeraki can still manage those protocols as long as there's an available Envoy Filter in the Envoy proxy side. Currently, for protocols in this category, [Redis](https://github.com/aeraki-mesh/aeraki/blob/master/docs/zh/redis.md) and Kafka are supported in Aeraki.
66
66
## Reference
67
67
*[Implement an application protocol](https://www.aeraki.net/zh/docs/v1.0/tutorials/implement-a-custom-protocol/)
@@ -75,22 +75,22 @@ Aeraki can manage the below protocols in a service mesh:
75
75
* Kafka (Envoy native filter)
76
76
* Redis (Envoy native filter)
77
77
* MetaProtocol-Dubbo
78
-
* MetaProtocol-Thfirt
78
+
* MetaProtocol-Thrift
79
79
* MetaProtocol-bRPC (A RPC protocol open-source by Baidu)
80
80
* MetaProtocol-tRPC (A proprietary RPC protocol used in Tencent)
81
81
* MetaProtocol-qza (A proprietary protocol used in Tencent Music)
82
82
* MetaProtocol-videoPacket (A proprietary protocol used in Tencent Media Data Platform)
83
-
* MetaProtocol-Others:Alauda, Tencent iGame...
83
+
* MetaProtocol-Others: Alauda, Tencent iGame...
84
84
* MetaProtocol-Private protocols: Have a private protocol? No problem, any layer-7 protocols built on top of the [MetaProtocol](https://github.com/aeraki-mesh/meta-protocol-proxy) can be managed by Aeraki
*[x] Flexible Route Match Conditions (any properties can be exacted from layer-7 packet and used as match conditions)
90
+
*[x] Flexible Route Match Conditions (any properties can be exacted from layer-7 packets and used as match conditions)
91
91
*[x] Dynamic route update through Aeraki MetaRDS
92
92
*[x] Version Based Routing
93
-
*[x] Traffic Splittin
93
+
*[x] Traffic Splitting
94
94
*[x] Local Rate Limit
95
95
*[x] Global Rate Limit
96
96
*[x] Message mutation
@@ -103,7 +103,7 @@ Supported Features:
103
103
*[x] Peer Authorization on Interface/Method
104
104
*[ ] Request Authorization
105
105
106
-
> Note: Protocols built on top of MetaProtocol supports all above features in Aeraki Mesh, Envoy native filters only support some of the above features, depending on the capacities of the native filters.
106
+
> Note: Protocols built on top of MetaProtocol support all the above features in Aeraki Mesh, Envoy native filters only support some of the above features, depending on the capacities of the native filters.
0 commit comments