进阶说明
微服务基础篇只是实现一个简易的demo,搭建的工程并不适合团队作业,想要完善这个框架并使其可以适用于团队协作开发,需要做更多的工作,所以进阶篇是个人最重视的内容
常见问题
一个架构在开发中常会出现如下问题:
- 编码风格不统一,随意缩进,编码工具不统一;
- 公共方法不封装,随意复写,存在过多冗余代码;
- 编写隐藏代码,影响核心功能的代码写在不起眼的地方或者藏匿在另一份代码中;
- 属性配置在多个文件中出现,系统配置属性和自定义属性不分类;
- 模块分工不明确,多个模块出现相同功能代码;
- 其他
问题解决
- 对于编码风格,建议团队参考阿里编码规范统一编码,同时建议使用java规范编码并统一编码工具成 IntelliJ IDEA;
- 创建核心模块,分离出业务中的功能性代码,集中管理;
- 核心代码严格按照源码的风格编码;
- 引入远程配置,将服务的配置参数分类: 系统级别几乎不会变化的参数配置在本地 bootstrap 文件中;引入其他组件需要配置的参数放在远程配置中;多个服务同时引入了同一个组件并出现了相同的配置参数值时将配置转移至远程配置的 application 文件中;
- 模块分类为业务模块和底层功能模块,底层功能模块通过依赖方式被引入至业务模块完成其功能,功能模块直接部署至服务器运行实现其业务
- .……
进阶目标
- 封装核心功能,包含以下几点,各业务模块强制引入(fc-core);
- 封装全局数据转换配置,请求和响应数据的序列化定制;
- 封装 feign 和 hystrix 的配置,包括对请求拦截以及数据转码处理;
- 构造一个日志工具,在原本的日志功能上(记录至文档以及打印至工作台)额外加入同步至 ES,这样使用 Kibana 工具可以直接在网页端浏览详细的日志信息;
- 封装 redis 配置,主要是配置其对数据序列化的方式,以及封装一个工具类,简化常用 api 调用.
- 定义全局公共模块,封装全局常量、异常以及统一的返回体,各业务模块强制引入(fc-common);
- 封装 elasticsearch 的配置和依赖以及功能函数,各业务模块按需引入(fc-elastic);
- 封装 mybatis-plus 的配置和依赖,各业务模块按需引入(fc-mybatis);
- 封装 rabbitMq 的配置和依赖,各业务模块按需引入(fc-rabbit);
- 封装 jwt 的依赖和功能函数,各业务模块按需引入(fc-jwt);
- 创建逆向工程,保证所有业务模块项目结构一致(fc-generator),无需引入;
- 集成 web 工程必须的依赖,业务模块统一引入(fc-web)。
终极目标
- Jenkins 实现服务的自动化部署;
- 使用 YApi 实现接口文档的管理;
- 使用 Kibana 在线浏览日志进行问题跟踪;
- 使用 Maxwall 同步数据库数据至其他组件;
- MySQL 的主从备份环境搭建,实现读写分离;
- Redis 的 cluster 模式集群搭建;
- ElasticSearch 集群环境搭建;
- RabbitMq 集群环境搭建;
- 微服务的集群环境搭建;
- 以上引入第三方管理工具是为了开发和测试的伙伴更好的开展工作,集群环境的搭建是为了提高整个系统的吞吐量和稳定性;
- 微服务功能的搭建只是其中的一部分而已,但也是开发主要负责的部分;
- 线上环境建议使用 k8s,由于本人现阶段对这些工具还只是处于学习阶段,条件允许的话会慢慢完成这个目标