一、项目拆解
分布式系统
一个请求由多个系统协同完成,这种系统称为分布式系统
- 服务拆分:单体项目一个模块修改需要重新部署、运维整个项目,故将其拆分解耦
- 配置中心:拆分为多个子项目后,由于每个模块都需要配置文件,如果配置文件修改的话,需要 修改所有模块的配置,故将配置隔离到配置中心统一管理。
- 调度中心:定时任务的执行,需要统一管理、统一调度
- 日志统一管理:统一收集所有模块的日志信息
- 预警系统:故障追踪
- 监控系统
报警系统
故障案例:
- FullGC线上故障案例
stop-the-world
:GC的时候其他线程是不工作的,请求会被挂起的
- 慢SQL调优案例
排查路线:
- 问题现象描述
- 初步判断
- 版本更新
- 参数异常(收到异常数据)
- 临时解决方案
- 能够支持故障切换,则保留故障现场
- 重新、版本回滚(复盘认识自己的不足,详细了解问题,看看自己能够在这次事故中能够学习到什么)
- Linux的重要性,在排查问题的时候,Linux的命令是很重要的,需要掌握。
- 生产环境绝不可以用工具操作生产环境 ,如Navicat工具直接修改数据,应该都走SQL语句变更流程, 否则会导致数据被修改但是无法追踪。
二、方案落地
技术并不是最复杂的,人和事及关系才是麻烦
提出技术方案
现状/问题:
- 单体应用:单个体量不合理,主平台体量太大,无法整体更新维护;
- 多版本共存:版本混乱,只敢添加,不敢修改;
- 系统整体脆弱,访问量一大就挂;
- 管理问题:发布困难、测试困难、修改困难、排错困难;
技术落地顺序:
数据库
是整个信息系统中生命周期最长、最难修改的部分。- 开发规范化;
- 引入项目管理,将具体服务的开发实现,最好以工单或项目来落地; (作为一个开发组长,应该学习如何更好的落地,更好的具体的开发任务,并分配和跟进)
落地方法
- 对项目进行总体规划
- 项目管理
- 知识分享
- 团队建设
- 技术分享
- 工程师文化
包结构和命名规范
- 规范命名各个包名及包的相关内容,有明确的项目规范,对项目落地、开发都会很顺畅
模块分层及依赖关系
- 系统各个模块的分层以及模块和模块间的依赖关系
接口和类定义规范
三、实践场景
GitLab/Github的高效使用
- 熟练git的使用
- 学会从Issue中寻找答案
四、衍生价值
博客书写-数据理论型
书写博客:掌握
3W1H
分析法
- What 是什么
- 示例:NIO始于Java 1.4,提供了新的非阻塞Java IO操作API
- Where 什么场景
- 用意是替换部分Java IO和网络相关的API
- Why 为什么要使用
- 非阻塞IO,一个线程可以处理多个IO操作,利用率更高
- How 怎么使用
- NIO中的三个核心组件需要学习,分别是:Buffer缓冲区、Channel通道、Selector选择器
博客书写-实操类技巧
实操类文章三部曲:
步骤 + 演示 + 总结
-
第一步:
- 描述:接下来我们执行下列xxxx实现xxxx功能
- 实操代码/命令演示
- 总结:通过上面操作,我们以及完成了xxxx,接下来
-
第二部: …
小结
定时的总结自己学习的知识,真正的理解并吸收为自己的
- 频率:一周1~2篇,一周一次总结
- 内容:以学习内容为主
- 平台:开放的公共平台为主,再转发到自己的个人博客/公众号
五、总结
本篇博客的内容主要总结于网易云课堂,其中部分截图是用收集拍照比较模糊。通过网易的案例视频, 我学习到了完整的企业级分布式(微服务)架构及各个模块的划分,如业务系统,报警系统,性能监控系统,分布式配置系统等, 在未来的工作中让我有了完整的架构及技术选型参考,同时学习了博客的书写流程,希望在接下来的博客中能够加以运用,写出逻辑清晰、有 内容的博客。