公众号IT徐胖子原创本文,请勿转载java
1 前言数据库
我认为技术之于业务的意义在于:技术能够实现业务的需求,技术能够丰富业务的手段,技术能够扩展业务的边界。缓存
2 概述安全
从0到1构建一个互联网技术系统是十分具备挑战性的工做,综合能力要求比较高。本文来谈一谈从0到1构建互联网技术系统基本方法论,具体实现细节可能会有所不一样。性能优化
3 关键步骤微信
3.1 技术选型网络
选用稳定的而且通过线上考验的技术和框架,不要刻意使用新技术或新版本。架构
3.2 绘制用例图框架
用例图由参与者,用例,边界以及它们之间的关系构成,用于描述系统功能。异步
用例图是外部用户(被称为参与者)所能观察到的系统功能的模型图。用例图呈现了一些参与者,一些用例,以及它们之间的关系,主要用于对系统、子系统或类的功能行为进行建模。用例图是系统的蓝图。
3.3 设计领域模型
设计清晰的领域模型对开发以及后续维护相当重要。简而言之就是系统有多少个模块,每一个模块之间是怎么交互的,是同步仍是异步,走消息仍是直接调用。此时每一个工程师能够认领本身熟悉的模块,做为子项目负责人,后续分模块进行开发。
3.4 设计交互流程
系统间的模块是如何交互的?系统和其它系统间如何交互?这些问题须要在这个阶段获得详细而具体的回答。
一个比较好的方法是绘制时序图,用一个典型的业务场景为例,描绘出整个系统交互的主要流程。
3.5 设计数据表
数据表设计有如下维度须要思考:
(1) 基础数据字段
(2) 核心业务字段
(3) 数据表索引设计
(4) 数据表体量
(5) 是否须要分库分表
3.6 新建工程模块
如今架构师就要开始建立工程和模块了。原则上是一个领域一个工程,按照领域级别分别开发和部署。固然项目刚开始为了快速迭代能够先合并几个领域到一个工程,等到体量大了再拆分。
3.7 明确代码规约
异常是抛出仍是捕获,接口的返回值须要用Result包装,监控、告警、流控由切面统一处理等,这样系统会具备很好的维护性。
3.8 进入开发阶段
此时开发的基础条件都已具有,每一个模块的负责人按照模块进行开发。
3.9 进入测试阶段
开发人员单元测试要完备,测试人员先按模块进行测试,最后全链路测试。
3.10 进入发布阶段
明确各模块依赖关系,明确发布顺序,肯定回滚方案。注意RPC服务循环依赖问题。
4 核心指标
完成上述工做,功能相关的工做就完成了。固然一个系统仅仅完成功能是远远不够的,还有如下的几个核心指标须要关注。
4.1 机器指标
架构师只关注功能层面是不够的,由于有些功能看似正常,可是在运行一段时间会暴露严重问题。
好比刚发布上去功能彻底正常,但运行一段时间后响应速度显著降低,缘由是有开发人员在代码中随意声明线程,频繁建立线程达到了Linux支持的最大线程数,致使整个应用没法接收新的请求。
因此在线上还应该关注机器指标,好比线程数,CPU利用率,内存,磁盘空间,磁盘IO,网络流量,负载状况,GC状况等等。
当系统运行一段时间后出现耗时莫名增长,超时报警异常增多,但并无发布或升级的操做,就须要马上分析机器指标。
4.2 性能指标
在客户端层,代理层,WEB层,服务端层,数据层都有着本身的性能优化的手段。简单介绍服务层和数据层常见优化方案。
常见的作法是在服务层和数据层之间加一个缓存层,能够是本地缓存也能够是分布式缓存,原则就是将数据放在离用户更近的地方,以空间换时间。
技术架构上能够抽出一层缓存的工具框架包,在框架中统一提供好比缓存击穿,分布式锁等解决方案。
4.3 监控指标
没有监控报警的业务系统很是不安全,工程师必须对系统监控报警敏感且及时响应。监控能够从如下方面去思考:
(1) 业务监控
业务异常:单位时间出现X次须要告警
延时监控:某状态单位时间内是否变化
数据量监控:单位时间数据量是否正常
(2) 系统监控
系统异常是不容许出现的异常,好比空指针,操做数据库失败等异常,只要出现就马上须要告警被感知。
4.4 安全指标
系统的安全性是系统的根本,要从系统安全和业务安全两个方向去考虑。下列指标只是提供一个思路,还有不少指标能够补充:
(1) 业务安全
(a) 超时是失败仍是重试
(b) 补偿机制是否完备
(c) 分布式一致性是否实现
(d) 幂等性是否完备(监听消息)
(2) 系统安全
(a) 是否鉴权
(b) 是否流控
(c) 是否高频检测
(d) 是否随意声明线程
5 利用大数据
大数据技术和框架层出不穷,咱们能够选择一些来扩展系统的功能,减轻系统的压力。
能够利用Hive进行离线数据分析,ES进行实时数据分析和数据检索,HBase存储行为轨迹数据等,能够减轻数据库压力,下降系统风险。大数据平台还能够提供数据化产出,为数据化运营提供有力保障。
6 文章总结
从0到1构建互联网技术系统须要有必定的架构思惟和能力,这种能力也只有在不断实践,踩坑和思考中才能够造成。踩坑也不要灰心,注意吸收教训,总结经验,这样才能尽快成为一名合格的架构师。
长按二维码关注本公众号的精彩文章
本文分享自微信公众号 - java1234(gh_27ed55ecb177)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。