服务端开发者从零构建系统方法论

欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,欢迎大家加我微信「java_front」一起交流学习

1 前言

我认为技术之于业务的意义在于:技术可以实现业务的需求,技术可以丰富业务的手段,技术可以扩展业务的边界。

从0到1构建一个互联网技术系统是十分具有挑战性的工作,综合能力要求比较高。本文来谈一谈从0到1构建互联网技术系统基本方法论,具体实现细节可能会有所不同。


2 关键步骤

2.1 技术选型

选用稳定的并且经过线上考验的技术和框架,不要刻意使用新技术或新版本。


2.2 绘制用例图

用例图由参与者,用例,边界以及它们之间的关系构成,用于描述系统功能。

用例图是外部用户(被称为参与者)所能观察到的系统功能的模型图。用例图呈现了一些参与者,一些用例,以及它们之间的关系,主要用于对系统、子系统或类的功能行为进行建模。用例图是系统的蓝图。


2.3 设计领域模型

设计清晰的领域模型对开发以及后续维护至关重要。简而言之就是系统有多少个模块,每个模块之间是怎么交互的,是同步还是异步,走消息还是直接调用。此时每个工程师可以认领自己熟悉的模块,作为子项目负责人,后续分模块进行开发。


2.4 设计交互流程

系统间的模块是如何交互的?系统和其它系统间如何交互?这些问题需要在这个阶段得到详细而具体的回答。

一个比较好的方法是绘制时序图,用一个典型的业务场景为例,描绘出整个系统交互的主要流程。


2.5 设计数据表

数据表设计有以下维度需要思考

  • 基础数据字段
  • 核心业务字段
  • 数据表索引设计
  • 数据表体量
  • 是否需要分库分表

2.6 新建工程模块

现在架构师就要开始创建工程和模块了。原则上是一个领域一个工程,按照领域级别分别开发和部署。当然项目刚开始为了快速迭代可以先合并几个领域到一个工程,等到体量大了再拆分。


2.7 明确代码规约

异常是抛出还是捕获,接口的返回值需要用Result包装,监控、告警、流控由切面统一处理等,这样系统会具有很好的维护性。


2.8 开发阶段

此时开发的基础条件都已具备,每个模块的负责人按照模块进行开发。


2.9 测试阶段

开发人员单元测试要完备,测试人员先按模块进行测试,最后全链路测试。


2.10 发布阶段

明确各模块依赖关系,明确发布顺序,确定回滚方案。注意RPC服务循环依赖问题。


3 核心指标

完成上述工作,功能相关的工作就完成了。当然一个系统仅仅完成功能是远远不够的,还有以下的几个核心指标需要关注。


3.1 机器指标

架构师只关注功能层面是不够的,因为有些功能看似正常,但是在运行一段时间会暴露严重问题。

例如刚发布上去功能完全正常,但运行一段时间后响应速度显著下降,原因是有开发人员在代码中随意声明线程,频繁创建线程达到了Linux支持的最大线程数,导致整个应用无法接收新的请求。

所以在线上还应该关注机器指标,比如线程数,CPU利用率,内存,磁盘空间,磁盘IO,网络流量,负载情况,GC情况等等。

当系统运行一段时间后出现耗时莫名增加,超时报警异常增多,但并没有发布或升级的操作,就需要立刻分析机器指标。


3.2 性能指标

在客户端层,代理层,WEB层,服务端层,数据层都有着自己的性能优化的手段。简单介绍服务层和数据层常见优化方案。

常见的做法是在服务层和数据层之间加一个缓存层,可以是本地缓存也可以是分布式缓存,原则就是将数据放在离用户更近的地方,以空间换时间。

技术架构上可以抽出一层缓存工具框架包,在框架中统一提供比如缓存击穿,分布式锁等解决方案。


3.3 监控指标

没有监控报警的业务系统非常不安全,工程师必须对系统监控报警敏感且及时响应。监控可以从以下方面去思考。

(1) 业务监控

  • 业务异常:单位时间出现X次需要告警

  • 延时监控:某状态单位时间内是否变化

  • 数据量监控:单位时间数据量是否正常

(2) 系统监控

  • 系统异常是不允许出现的异常,例如如空指针,操作数据库失败等异常,只要出现就立刻需要告警被感知

3.4 安全指标

系统的安全性是系统的根本,要从系统安全和业务安全两个方向去考虑。下列指标只是提供一个思路,还有很多指标可以补充。

(1) 业务安全

  • 超时是失败还是重试
  • 补偿机制是否完备
  • 分布式一致性是否实现
  • 监听消息业务幂等性是否完备

(2) 系统安全

  • 是否鉴权
  • 是否流控
  • 是否高频检测
  • 是否随意声明线程

4 利用大数据

大数据技术和框架层出不穷,我们可以选择一些来扩展系统的功能,减轻系统的压力。

例如我们可以利用Hive进行离线数据分析,ES进行实时数据分析和数据检索,HBase存储行为轨迹数据等,可以减轻数据库压力,降低系统风险。大数据平台还可以提供数据化产出,为数据化运营提供有力保障。


5 文章总结

从0到1构建互联网技术系统需要有一定的架构思维和能力,这种能力也只有在不断实践,踩坑和思考中才可以形成。踩坑也不要灰心,注意吸取教训总结经验,这样才能尽快成为一名合格的架构师。


欢迎大家关注公众号「JAVA前线」查看更多精彩分享文章,主要包括源码分析、实际应用、架构思维、职场分享、产品思考等等,欢迎大家加我微信「java_front」一起交流学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值