网易案例分析

一、项目拆解

分布式系统

一个请求由多个系统协同完成,这种系统称为分布式系统

微服务架构.png

  • 服务拆分:单体项目一个模块修改需要重新部署、运维整个项目,故将其拆分解耦
  • 配置中心:拆分为多个子项目后,由于每个模块都需要配置文件,如果配置文件修改的话,需要 修改所有模块的配置,故将配置隔离到配置中心统一管理。
  • 调度中心:定时任务的执行,需要统一管理、统一调度
  • 日志统一管理:统一收集所有模块的日志信息
  • 预警系统:故障追踪
  • 监控系统

报警系统

故障案例

  • FullGC线上故障案例
    • stop-the-world:GC的时候其他线程是不工作的,请求会被挂起的
  • 慢SQL调优案例

排查路线

  • 问题现象描述
  • 初步判断
    • 版本更新
    • 参数异常(收到异常数据)
  • 临时解决方案
    • 能够支持故障切换,则保留故障现场
    • 重新、版本回滚(复盘认识自己的不足,详细了解问题,看看自己能够在这次事故中能够学习到什么)
  • Linux的重要性,在排查问题的时候,Linux的命令是很重要的,需要掌握。
  • 生产环境绝不可以用工具操作生产环境 ,如Navicat工具直接修改数据,应该都走SQL语句变更流程, 否则会导致数据被修改但是无法追踪。

 

二、方案落地

技术并不是最复杂的,人和事及关系才是麻烦

提出技术方案

现状/问题

  • 单体应用:单个体量不合理,主平台体量太大,无法整体更新维护;
  • 多版本共存:版本混乱,只敢添加,不敢修改;
  • 系统整体脆弱,访问量一大就挂;
  • 管理问题:发布困难、测试困难、修改困难、排错困难;

技术落地顺序:

  1. 数据库是整个信息系统中生命周期最长、最难修改的部分。
  2. 开发规范化;
  3. 引入项目管理,将具体服务的开发实现,最好以工单或项目来落地; (作为一个开发组长,应该学习如何更好的落地,更好的具体的开发任务,并分配和跟进)

落地方法

  • 对项目进行总体规划
  • 项目管理
  • 知识分享
  • 团队建设
  • 技术分享
  • 工程师文化

包结构和命名规范

  • 规范命名各个包名及包的相关内容,有明确的项目规范,对项目落地、开发都会很顺畅

image.png

模块分层及依赖关系

  • 系统各个模块的分层以及模块和模块间的依赖关系

image.png

接口和类定义规范

image.png

 

三、实践场景

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篇,一周一次总结
  • 内容:以学习内容为主
  • 平台:开放的公共平台为主,再转发到自己的个人博客/公众号

 

五、总结

本篇博客的内容主要总结于网易云课堂,其中部分截图是用收集拍照比较模糊。通过网易的案例视频, 我学习到了完整的企业级分布式(微服务)架构及各个模块的划分,如业务系统,报警系统,性能监控系统,分布式配置系统等, 在未来的工作中让我有了完整的架构及技术选型参考,同时学习了博客的书写流程,希望在接下来的博客中能够加以运用,写出逻辑清晰、有 内容的博客。