2.系统架构演进
艾编程架构课程第二节笔记
项目演进过程
项目实施阶段
项目技术覆盖
Springboot、MyBatis、Redis、Nginx、ES搜索引擎、FastDFS、分布式会话、单点登录、RabbitMQ消息队列列、MyCat、Sharding-Jdbc、分布式锁设计、分布式全局id设计、分布式事务和数据一致性、分布式限流、Springcloud G版微服务、Dubbo、Jenkins、Docker、k8s、容器器弹性扩容、JVM性能调优、MySQL性能优化、Tomcat性能调优、Linux性能优化等,以上技术栈覆盖了了市面上90%的技术内容
大型互联网系统的特点与设计思想
1.大型互联网系统的特点
高并发:一个网站还是系统,从小到大的过程
高可用:HA,高可用的核心就是冗余,SLA,7*24不不间断的服务
大数据:就是为了做用户画像,还有就是做用户行为分析
迭代周期短:越是大型的系统,越不能闭门造车,1-2周就需要产生一个迭代成果
用户量庞大:系统支持用户服务非常巨大
可持续发展:任何一个系统都需要不断升级
安全别高:系统只要上线,并且用户量增大,访问量上去了,后门,漏洞,XSS,CSRF,注入
可弹性、可伸缩:流量是动态,系统如果不能解决突发流量,就非常危险
吞吐量高:
2.大型互联网系统的设计思想
解 耦 : MVC,项目解耦:逻辑流程上的, 架构解耦:是基于业务
集群: 解决基础服务能力
CDN: 是一种加速的服务,按照流量收费,cloudfront,OSS user->应用(静态资源)->数据库
缓 存 : Redis,对我们核心数据库进行保护
分布式系统: 都是为了解决单一节点的应用瓶颈
异步: Ajax,MQ:一般是应用在后端写压力过大的情况
业务分离: 按照业务进行拆分,然后相应团队进行维护
容灾: 数据上的灾备,这个更重要
3.大型互联网系统架构演变历程
初始化单机架构:
第一次演进:Tomcat与数据库分开部署
第二次演进:引入本地缓存和分布式缓存
第三次演进:引入反向代理实现负载均衡
第四次演进:数据库读写分离
第五次演进:数据库按业务分库
第六次演进:把大表拆分为小表
第七次演进:使用LVS或F5来使多个Nginx负载均衡
第八次演进:通过DNS轮询实现机房间的负载均衡
第九次演进:引入NoSQL数据库和搜索引擎等技术
第十次演进:大应用拆分为小应用
第十一次演进:复用的功能抽离成微服务
第十二次演进:引入企业服务总线ESB屏蔽服务接口的访问差异
第十三次演进:引入容器化技术实现运行环境隔离与动态服务管理
第十四次演进:以云平台承载系统
研发到架构师的蜕变&架构师需要具备的技术栈能力
技术方面:
1.语言基础:JVM、GC、IO、类加载、并发多线程、框架、AOP、IOC、线程安全,
2.脚本语言:shell、js、python
3.架构设计:要素、模式、架构演进
4.开发工具:IDE(Eclipse,IDEA),Git、Svn、Jenkins、Maven、Gradle、JIRA、Wiki
5.负载均衡:DNS、Nginx、F5、LVS、HAProxy,(HA:keepalived)
6.设计模式
7.数据结构与算法
8.运维和测试:监控、日志、测试
9.分布式服务:理论(SOA、微服务理理论)、springcloud、dubbo、通信机制、
服务治理、API网关、Netty
10.虚拟化:Docker、IaaS、PaaS、SaaS、k8s
11.中间件:容器器、MQ、缓存、数据库、NoSQL
12.一致性:锁、强一致性、分布式一致性、一致性算法、分布式事务
13.大数据:ETL
还有方案评估:评估各种风险尤其发布阶段要进行深入关注
在实际工作中如何进行系统架构
一:先做背景调查
1.系统所用的技术栈
2.团队管理的流程(这里是和项目经理沟通的地方)
3.需求的开发模式:基于传统的还是基于敏捷(这里就是和产品沟通的地方)
4.系统所处的架构阶段
5.和业务沟通 ,了解业务所面临的技术难题:业务人员、BOSS、客户
6.寻找业务的复杂度的点
什么叫复杂度: 一个系统到底问题来源是哪里
复杂度的来源: 高性能,高可用,可扩展性,低成本, 安全
二:知道问题本身
1.制定方案
时间成本、技术成本、应该采用最适合或能最快速解决问题的方式
一定要有备选方案:3-5个为佳
2.评估和选择
最简派:基于时间的
最牛派:炫技,甲方项目
最熟派:用于成本方面
领导派:权衡利弊
业务也不一定全面理解,
DID、N+1
在没有明确数据节点和时间成本要求的情况下,一般不会有最真实的意图和决策的
数据量化很重要
3.实施
4.优化
5.PDCA
本文地址:https://blog.csdn.net/weixin_42031645/article/details/108200530
上一篇: 回话处理程序(17)