# distributed-system-framework **Repository Path**: mrcan/distributed-system-framework ## Basic Information - **Project Name**: distributed-system-framework - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-04-10 - **Last Updated**: 2022-04-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 分布式系统架构介绍 基于Linux平台开发,C++语言编写的分布式系统。主要包含服务端、负载均衡服务器、客户端、信息采集器、数据库连接池等。 服务器端使用MVC设计模式,拟采用线程池+Libevent的IO模型。 将为其实现简单的负载均衡算法,实现以一致性hash为底层算法。 数据存储方面拟对MySQL数据库C-API进行类封装。 ## 软件架构 分布式架构,由若干微服务组件构成。比如注册服务,登录服务,添加好友服务。把原来合在一起的进程进行解耦化。 对于集群式服务器来说,集群服务器需要一个负载均衡服务器转发路由。分布式化之后,需要中心节点“**服务注册和发现中心**”,此节点就好比于集群式中的nginx,此中心中有一个表,有服务项目和对应服务器的IP地址和端口信息之间的映射关系,还有相应的状态信息,确定服务器的状态需要定时完成**健康检查**。 分布式架构也需要有相应的负载均衡算法,由中心节点处理。 ## RPC (Remote Procedure Call) 有微服务模块a和微服务模块b,模块b想要处理模块a可以处理的任务,即b欲复用a的功能,就需要在模块b用到rpc调用,这个过程对于模块b是透明的,在b来看就是在本地调用了一些函数。 ### 分布式链路追踪 在函数调用过程中,有可能存在较长的函数调用链,比如a调用b,而b又需要调用c,c又需要调用d。这个过程中,可能出现一些bug,为了方便定界定位问题所在,需要一个机制来完成分布式链路追踪。一个有力的工具——**日志模块**对调试很有帮助。 ## 技术处理 1. Linux下socket编程; 2. 自实现Logger日志类,使用封装的Message信息类。 3. 单例模式 4. 服务器端线程池模型的创建、使用 5. 负载均衡算法的实现,一致性hash算法 6. CJson格式的消息封装 7. Libevent网络框架库的使用 9. MySQL数据库C接口的C++类封装 10. 数据库连接池 11. MVC设计模式处理具体业务 12. MD5算法 13. cmake构建项目 ### 层级架构 1. 接入层 * tcpServer、tcpClient * 线程池 * 网络模型 2. 业务层 * MVC模式 - CRUD 3. 缓存层 * redis - 可以持久化 * memcached 4. 持久化层 * mysql * maridb * SqlServer * oracle * tidb ## 主要组件及其现有产品 * 注册和发现中心 * etcd - Go * zookeeper - Java * consul - Go * RPC * gRPC - Google * dubbo - Alibaba * 日志模块 * log4cpp - 类似于Apache开发的log4j * spdlog ### 其他模块 * 健康检查 * 网关 - gateway * 流量控制 - IP控制、时间控制 * 服务限流、服务熔断、服务降级 # 具体开发环境、工具 * 云服务器 - Cloud Virtual Machine * Ubuntu OS - 20.04 LTS * docker、cmake (g++/gcc)、gdb、git、cloc * XShell、MobaXterm * VSCode + remote-SSH