@@ -213,129 +213,6 @@ SDK 审核管理模块。
213
213
214
214
215
215
216
- ### 中间件与基建
217
-
218
- #### Consul
219
-
220
- FinClip后端采用微服务架构开发模式,在微服务中,服务治理是非常重要的一环。服务通过注册到服务中心,以 供其他服务寻得接又调用地址,从而实现架构内部的服务间调用。FinClip采用Consul作为服务治理中心,在部分 场景,Consul还充当配置中心的作用。
221
-
222
- Consul分为Server节点和Client节点,在我们使用的架构中,K8S集群中的每个节点会部署普通节点(client agent), 在Kubernetes集群外的宿主机上部署的三个Server节点 (server节点是数据集群,普通agent只负责请求转发和心跳检测等)。
223
-
224
- 架构图如下所示:
225
-
226
- ![ consul] ( /img/consul.png )
227
-
228
- 在这样的架构中, Consul服务端使用Raft选举,因此最少三个节点,且宕机数量不可超过半数,推荐单数节点,例如3、5、7。:
229
-
230
- * Server节点部署在宿主机之中,使用docker-compose启动
231
- * Client节点部署在Kubernetes中,使用DaemonSet部署。
232
- * 集群必须 (N / 2) + 1个节点存活
233
-
234
- * 当集群内LEADER节点宕机时,会发生选举,产生新的LEADER节点,集群可用
235
- * 当节点宕机数量大于Server / 2 时,集群不可用
236
- * 可扩容/缩容
237
-
238
-
239
-
240
- #### Redis
241
-
242
- &emsp ; FinClip采用Redis实现数据缓存功能,Redis 是一种开源(BSD 许可)、内存中数据结构存储的开源软件,通常 用作数据库、缓存和消息代理。 Redis 提供了诸如字符串、散列、列表、集合、带范围查询的排序集合、位图、 超级日志、地理空间索引和流等数据结构。 Redis 内置复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久 化,并通过 Redis Sentinel 和自动提供高可用性,在实际部署中,我们推荐客户采用Redis的集群模式,以实现高 可用性和可扩展性。
243
-
244
-
245
-
246
- Redis 是一个高性能的 key-value 数据库。目前我们部署的 Redis 集群部署是这样的:
247
-
248
- * 集群共 * 6* 个 Redis 实例
249
- * 集群内部 * 3* 主 * 3* 从模式
250
- * Redis 版本:6.0
251
-
252
- 我们采用三台机服务器部署,每台服务器 2 个 Redis 实例,对于更高的 QPS 要求,我们推荐使用 6 台服务器部署,每个服务器一个 Redis 实例。在总共 6 个 Redis 实例里,其中三个 Master 节点,三个 Slave 节点,且默认情况下 Master 与 Slave 会自动避免部署在同一台机器中。
253
-
254
- Redis 的拓扑图如下:
255
-
256
- ![ redis] ( /img/redis.png )
257
-
258
- 在这样的架构中:
259
-
260
- * 当集群内一个主节点宕机时,其从节点会自动升级成为主节点
261
- * 集群中从节点宕机不影响集群使用
262
- * 可扩容 / 缩容
263
-
264
- * 当集群内一个主节点宕机时,其从节点会自动升级成为主节点
265
- * 集群中从节点宕机不影响集群使用
266
- * 经测试,Redis 从宕机不影响业务使用,Redis 发生主从切换时,会有秒级影响。
267
-
268
-
269
-
270
- #### MongoDB
271
-
272
- FinClip 业务数据存储支持多种数据库,通常我们采用MongoDB作为主要的存储方案,MongoDB 是一个基于分 布式文件存储的数据库,由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案,且支持多 机房部署。 在实际部署中,我们推荐客户使用MongoDB的副本集、分片模式,以满足可扩展、高可用的运维需 求。
273
-
274
-
275
- ![ mongo] ( /img/mongo.png )
276
-
277
- 副本集是一组维护相同数据集合的 mongod实例。副本集包含多个数据承载节点和一个可选的仲裁节点。在数据承载节点中,有且仅有一个成员为主节点,其他节点为从节点。
278
-
279
-
280
-
281
- #### Elasticsearch
282
-
283
- &emsp ; 对于用户行为数据,FinClip 采用 ElasticSearch 进行存储、检索和分析。Elasticsearch 是一种分布式 RESTful 搜 索和分析引擎,能够处理越来越多的用例。作为 Elastic Stack 的核心,它集中存储您的数据,以实现闪电般的快 速搜索、微调相关性和可轻松扩展的强大分析。
284
-
285
- ![ es] ( /img/es.png )
286
-
287
-
288
-
289
- #### Kafka
290
-
291
- 在高并发系统中,使用消息队列进行异步处理是惯用的模式。FinClip采用Kafka作为消息队列中间件,基于 Kafka的多分区设计,可以实现高吞吐量消息队列管理。Apache Kafka 是一个开源分布式事件流平台,被数千家 公司用于高性能数据管道、流分析、数据集成和关键任务应用程序。
292
-
293
- 同样地,在生产系统中,我们推荐使用多节点部署Kafka集群,从而实现高吞吐量、高可用已经可扩展的运维功 能:
294
-
295
- ![ kafka] ( /img/kafka.png )
296
-
297
-
298
-
299
- #### Zookeeper
300
-
301
- kafka的协调选举节点,负责维护kafka节点状态。
302
-
303
-
304
-
305
- #### MinIO
306
-
307
- FinClip还用到对象存储,用于存储小程序包、图片等静态资源文件。对象存储是业界非常成熟的存储方案,在客 户的实际部署中,我们支持使用第三方对象存储,例如腾讯云COS、阿里云OSS、AWS S3等等。除此之外,在私 有化部署中,我们可以使用Minio进行部署对象存储服务服务器。
308
-
309
- ![ minio] ( /img/minio.png )
310
-
311
-
312
-
313
- ### 附加组件
314
-
315
- #### Ansible
316
-
317
- 提供自动化部署功能
318
-
319
-
320
-
321
- #### Docker
322
-
323
- 提供基本的容器环境
324
-
325
-
326
-
327
- #### Docker-Compose
328
-
329
- 为中间件集群建立提供必要的编排工具
330
-
331
-
332
-
333
- #### Rancher
334
-
335
- 用于建立 Kubernetes 集群,并提供一个易用性极强的集群综合管理面板
336
-
337
-
338
-
339
216
#### Registry
340
217
341
218
用于** 临时性** 存储、分发在部署过程中以及后续运行时需要用到的 Docker 镜像。
@@ -344,4 +221,4 @@ FinClip还用到对象存储,用于存储小程序包、图片等静态资源
344
221
345
222
#### Tinygit
346
223
347
- 用于** 临时性** 存储、分发在部署过程中以及后续运行时需要用到的 Helm 编排文件,以 Git 代码的方式储存。
224
+ 用于** 临时性** 存储、分发在部署过程中以及后续运行时需要用到的 Helm 编排文件,以 Git 代码的方式储存。
0 commit comments