七、随需应变:网站的可扩展架构
扩展性(Extensibility):指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。是系统架构设计层面的开闭原则,架构设计考虑未来功能扩展,当系统增加新功能时,不需要对现有系统的结构和代码进行修改。
伸缩性(Scalability):指系统能够通过增加(减少)自身资源规模的方式增强(减少)自己计算处理事务的能力。
A.构建可扩展的网站架构
1.软件架构师最大的价值不在于掌握多少先进的技术,而在于具有将一个大系统切分成N个低耦合的子模块的能力,这些子模块包含横向的业务模块,也包含纵向的基础技术模块。
2.核心思想是模块化,在此基础上,降低模块间的耦合性,提高模块的复用性。
B.利用分布式消息队列降低系统耦合性
1.事件驱动架构
2.分布式消息队列
C.利用分布式服务打造可复用的业务平台
1.分布式服务通过接口分解系统耦合性,不同子系统通过沙漠玫瑰的接口描述进行服务调用。
2.巨无霸系统的问题:编译、部署困难;代码分支管理困难;数据库连接耗尽;新增业务困难;
3.解决方案
4.Web Service与企业级分布式服务
缺点:臃肿的注册与发现机制;低效的XML序列化手段;开销相对较高的HTTP远程通信;复杂的部署与维护手段;
5.大型网站分布式服务的需求与特点
负载均衡、失效转移、高效的远程通信、整合异构系统、对应用最少侵入、版本管理、实时监控
6.分布式服务框架设计:Thrift、Dubbo
D.可扩展的数据结构
利用NoSQL数据库中使用的ColumnFamily(列族)设计。
E.利用开放平台建设网站生态圈
1.开放平台是网站内部和外部交互的接口,外部需要面对人多的第三方开发者,内部需要面对网站内诸多的业务服务。
2.架构:API接口、协议转换、安全、审计、路由、流程
八、固若金汤:网站的安全架构
A.网站应用攻击与防御
1.XSS攻击
2.注入攻击
3.CSRF攻击
4.其他攻击漏洞
5.Web应用防火墙:ModSecurity
6.网站安全漏洞扫描
B.信息加密技术及密钥安全管理
1.单向散列加密:md5、sha等,加salt
2.对称加密:DES算法、RC算法等,加密使用同一个密钥
3.非对称加密:RSA算法
4.密钥安全管理
C.信息过滤与反垃圾
1.文本匹配:解决敏感词过滤的问题
2.分类算法:贝叶斯算法、TAN算法、ARCS算法
3.黑名单:Hash表、布隆过滤器
D.电子商务风险控制
1.风险:账户风险、买家风险、卖家风险、交易风险
2.风控
九、淘宝网的架构演化案例分析
1.LAMP->JAVA/ORACLE->MySQL/NoSQL
2.业务推动技术不断进步
十、维基百科的高性能架构设计分析
A.Wikipedia网站整体架构:LAMP+开源产品,GeoDNS、LVS、Squid、Lighttpd、PHP、Memcached、Lucene、MySQL
B.Wikipedia性能优化策略
1.前端性能优化
2.服务端性能优化:使用APC、Imagemagick、Tex、替换PHP的字符串查找函数starter()使用更优化的算法
3.后端性能优化:
缓存
MySQL
十一、海量分布式存储系统Doris的高可用架构设计分析
对于一个数据存储系统而言,高可用意味着:高可用的服务、高可靠的数据
A.分布式存储系统的高可用架构
1.冗余:服务器热备、数据多份存储
2.系统整体划分:
B.不同故障情况下的高可用解决方案
1.分布式存储系统的故障分类:瞬时故障、临时故障、永久故障
2.瞬时故障解决:多次重试
3.临时故障解决:需要人工干预,有问题服务器使用临时存储服务器
4.永久故障解决:启用备用服务器替代永久失效服务器
十二、网购秒杀系统架构设计案例分析
A.秒杀活动的技术挑战:对现有网站业务造成冲击、高并发下的应用,数据库负载、突然增加的网络及服务器带宽、直接下单
B.秒杀系统的应对策略
C.秒杀系统架构设计
1.如何控制秒杀商品页面购买按钮的点亮:使用一个JS文件,开始时修改其中内容,每次都请求,不被CDN等缓存,使用随机版本号。
2.如何只允许第一个提交的订单被发送到订单子系统:控制进入下单页面的入口,只有少数用户能进入,其他用户直接进入秒杀结束页面。比如10台服务器,每台处理10个请求,当请求超过10个,其他返回错误,再请求全局缓存记录,如果是第一个,进入订单页面,其他返回失败。
十三、大型网站典型故障案例分析
A.写日志也会引发故障
B.高并发访问数据库引发的故障
C.高并发情况下锁引发的故障
使用锁操作要谨慎
D.缓存引发的故障
缓存服务器已经是网站架构不可或缺的一部分,需要和数据库一样的级别去管理
E.应用启动不同步引发的故障
F.大文件读写独占磁盘引发的故障
小文件和大文件不要共用存储
G.滥用生产环境引发的故障
访问生产环境要格外小心,数据库请专门的DBA维护
H.不规范的流程引发的故障
代码提交前用diff命令进行比较,确认没有提交不该提交的代码;加强code review,提交前至少被一个其他工程师做过code review并共同承担因代码引起的故障责任
I.不好的编程习惯引发的故障
注意对空对象、空值等的处理
十四、架构师领导艺术
A.关注人而不是产品
1.一群优秀的人做一件他们热爱的事,一定能取得成功
2.最好的软件管理是发掘项目组每个成员的优秀潜能
3.寻找一个值得共同奋斗的目标,营造一个让大家都能最大限度发挥自我价值的工作氛围
B.发掘人的优秀
1.是事情成就了人,而不是人成就了事
2.大多数人,包括我们自己,都比自己以为的更优秀,有些优秀需要在合适的环境中才会被激发出来,比如做一些有挑战的事,和更优秀的人合作,抑或拥有了超越自我的勇气
3.发掘人的优秀远比发掘优秀的人更有意义
C.共享美好蓝图
1.蓝图应该是表述清楚的:产品要做什么、不做什么、要达到什么业务目标
2.蓝图应该是形象的:产品能为用户创建什么价值、能实现什么样的市场目标、产品最终会长什么样
3.蓝图应该是简单的:一句话话说明白:我们在干什么
4.架构师要保持对目标蓝图的关注,对任何偏离蓝图的设计和决定保持警惕,错误的偏离要及时修正,必要的变更要经过大家讨论,并且需要重新获得大家的认同。
D.共同参与架构
1.不要只有架构师一个人拥有架构
2.让其他人维护框架与架构文档
E.学会妥协
1.对架构和技术方案的反对意见,其实意味着架构和技术方案被关注、被试图理解和接受。架构师不应过于敏感,应该坦率分享意见,求同存异
2.对于技术细节的争论应该立即验证而不是继续讨论
3.当大家不在讨论架构的时候,表明架构已经融入到项目、系统和开发者中了,架构师越早被遗忘表明架构越成功
F.成就他人
1.我们的工作不仅是生产产品,还要成就人,并最终成就我们自己
2.做成一个项目不但要给客户创造价值,为公司盈利,还要让项目成员获得成长
3.架构师作为团队的技术领导者,在项目过程中不要去试图控制什么,带着一个弹性的计划和蓝图推进,团队会管好他们自己
十五、网站架构师职场攻略
A.发现问题,寻找突破
1.所谓问题,就是体验——期望,当体验不能满足期望,就会觉得出了问题。消除问题有两种手段:改善体验或者降低期望。降低期望只是回避了问题,而如果直面期望和体验之间的差距,就会发现问题所在,找到突破点。
2.新员工首先要做的事情是融入团队
3.新员工最不需要做的事情就是证明自己的能力。
B.提出问题,寻求支持
1.问题被发现,它只是问题发现者的问题,而不是问题拥有者的问题,如果想要解决一个问题,就必须提出这个问题,让问题的拥有者知道问题的存在。
2.提出问题Tips:
3.所谓直言有讳是指想要表达的意图要直截了当说明白,不要兜圈子,但是在表达方式上要有所避讳,照顾到当事人的感受
C.解决问题,达成绩效
1.解决我的问题之前,先解决你的问题
2.适当的逃避问题
十六、漫话网站架构师
A.按作用划分架构师
设计型架构师、救火型架构师、布道型架构师、Geek型架构师
B.按效果划分架构师
夏尔巴人架构师:通常会开发项目中最具技术难度和挑战性的模块、斯巴达人架构师、达官贵人架构师
C.按职责角色划分架构师
产品架构师:参与产品的整个生命周期、基础服务架构师(平台型架构师)、基础设施架构师
D.按关注层次划分架构师
只关注功能的架构师、关注非功能的架构师、关注团队组织与管理的架构师、关注产品运营的架构师、关注产品未来的架构师
E.按口碑划分架构师
最好的架构师、好的架构师、一般的架构师、差的架构师、最差的架构师
F.非主流方式划分架构师
普通架构师、文艺架构师、1+1架构师
附录A:大型网站技术一览
A.前端架构
浏览器优化技术、CDN、动静分离,静态资源独立部署、图片服务、反射代理 、DNS
B.应用层架构
开发框架、页面渲染、负载均衡、Session管理、动态页面静态化、业务拆分、虚拟化服务器
C.服务层架构
分布式消息、分布式服务、分布式缓存、分布式配置
D.存储层架构
分布式文件、关系数据库、NoSQL数据库、数据同步
E.后台架构
搜索引擎、数据仓库、推荐系统
F.数据采集(日志)与监控
浏览器数据采集、服务器业务采集、服务器性能数据采集、系统监控、系统报警
G.安全架构
Web攻击、数据保护
H.数据中心机房架构
机房、机柜、服务器