当前位置:

首页 > 编程开发 > mysql大型网站技术架构核案例分析

mysql大型网站技术架构核案例分析

七、随需应变:网站的可扩展架构扩展性(Extensibility):指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。是系统架构设计层面的开闭原则,架构设计考虑未来功能扩展,当系统增加新功能时,不需要对现有系统的结构和代码进行修改。伸缩性(Scalability):指系统能够通过增加(减少)自身资源规模的方式增强(减少)自己计算处理事务的能力。A.构建可扩展的网站架构1.软件架构师最大的价值不在于掌握多少先进的技术,而在于具有将一个大系统切分成N个低耦合的子模块的能力,这些子模块包含横向的业务

七、随需应变:网站的可扩展架构

扩展性(Extensibility):指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。是系统架构设计层面的开闭原则,架构设计考虑未来功能扩展,当系统增加新功能时,不需要对现有系统的结构和代码进行修改。

伸缩性(Scalability):指系统能够通过增加(减少)自身资源规模的方式增强(减少)自己计算处理事务的能力。

A.构建可扩展的网站架构

1.软件架构师最大的价值不在于掌握多少先进的技术,而在于具有将一个大系统切分成N个低耦合的子模块的能力,这些子模块包含横向的业务模块,也包含纵向的基础技术模块。

2.核心思想是模块化,在此基础上,降低模块间的耦合性,提高模块的复用性。

B.利用分布式消息队列降低系统耦合性

1.事件驱动架构

  • 事件驱动架构(Event Driven Architecture):通过在低耦合的模块之间传输事件消息,以保持模块的松散耦合,并借助事件消息的通信完成模块间合作,常用的是分布式消息队列。

  • 消息队列利用发布—订阅模式工作,消息发送者发布消息,一个或者多个消息接收者订阅消息。

2.分布式消息队列

  • 队列是一种先进先出的结构 ,应用程序可以通过远程访问接口使用分布式消息队列,进行消息存取操作,进而实现分布式的异步调用。

  • 消息生产者应用程序通过远程访问接口将消息推送给消息队列服务器,消息队列服务器将消息写入本地内存队列后立即返回成功响应给消息生产者。消息队列服务器根据消息订阅列表查找 订阅消息的消息消费者应用程序 ,将消息队列中的消息按照先进先出(FIFO)的原则将消息通过远程通信接口发送给消息消费者程序。

  • 分布式消息队列可以很复杂,比如可以支持ESB(企业服务总线)、支持SOA(面向服务的架构),也可以很简单使用MySQL记录:消息生产者程序将消息当作数据记录写入数据库,消息消费者程序查询数据库并按记录写入时间戳排序,就实现了一个事实上的分布式消息队列。

C.利用分布式服务打造可复用的业务平台

1.分布式服务通过接口分解系统耦合性,不同子系统通过沙漠玫瑰的接口描述进行服务调用。

2.巨无霸系统的问题:编译、部署困难;代码分支管理困难;数据库连接耗尽;新增业务困难;

3.解决方案

  • 纵向拆分:将一个大应用拆分为多个小应用

  • 横向拆分:将复用的业务拆分出来,独立部署为分布式服务,新增业务只需要调用这些分布式服务,不需要依赖具体的模块代码

4.Web Service与企业级分布式服务

缺点:臃肿的注册与发现机制;低效的XML序列化手段;开销相对较高的HTTP远程通信;复杂的部署与维护手段;

5.大型网站分布式服务的需求与特点

负载均衡、失效转移、高效的远程通信、整合异构系统、对应用最少侵入、版本管理、实时监控

6.分布式服务框架设计:Thrift、Dubbo

D.可扩展的数据结构

利用NoSQL数据库中使用的ColumnFamily(列族)设计。

E.利用开放平台建设网站生态圈

1.开放平台是网站内部和外部交互的接口,外部需要面对人多的第三方开发者,内部需要面对网站内诸多的业务服务。

2.架构:API接口、协议转换、安全、审计、路由、流程

八、固若金汤:网站的安全架构

A.网站应用攻击与防御

1.XSS攻击

  • XSS攻击即跨站脚本攻击(Cross Site Script),指黑客通过篡改网页,注入恶意HTML脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。

  • 一种攻击是反射型,攻击者诱使用户点击一个嵌入恶意脚本的链接,达到攻击的目的

  • 另一种攻击是持久型XSS攻击,黑客提交含有恶意脚本的请求,保存在被攻击的Web站点的数据库中,用户浏览网页时,恶意脚本被包含在正常页面中,达到攻击的目的。经常用在论坛、博客等Web应用中。

  • 防范:消毒,过滤危险字符;HttpOnly,禁止页面JS访问带有HttpOnly属性的Cookie;

2.注入攻击

  • 分为SQL注入和OS注入

  • SQL注入获取数据库结构:利用开源软件程序、错误回显、盲注

  • SQL注入防范:消毒;参数绑定,使用预编译手段,绑定参数;

3.CSRF攻击

  • CSRF(Cross Site Request Forgery,跨站点请求伪造),攻击者通过跨站请求,以合法用户的身份进行非法操作。主要手法是利用跨站请求,在用户不知情的情况下,以用户的身份伪造请求,利用了浏览器Cookie或服务器Session策略,盗取用户身份。

  • 防范:表单Token、验证码、Referer check(检查HTTP请求头的Referer域中记录的请求来源)

4.其他攻击漏洞

  • Error Code:错误回显、HTML注释、文件上传、路径遍历

5.Web应用防火墙:ModSecurity

6.网站安全漏洞扫描

B.信息加密技术及密钥安全管理

1.单向散列加密:md5、sha等,加salt

2.对称加密:DES算法、RC算法等,加密使用同一个密钥

3.非对称加密:RSA算法

4.密钥安全管理

  • 把密钥和算法放在一个独立的服务器上,甚至做成一个专用的硬件设施,应用系统通过调用服务实现数据加解密。

  • 将解密算法放在应用系统中,密钥则放在独立服务器中,实际存储时,密钥被切分成数片,加密后分别保存在不同存储介质中,兼顾密钥安全性的同时又改善了性能。

C.信息过滤与反垃圾

1.文本匹配:解决敏感词过滤的问题

  • 少量内容使用正则替换一类的就可以

  • 词多且并发高时,使用Trie树算法(双数组Trie算法)

  • 构造Hash表进行文本匹配

  • 有时还需要进行降噪处理,如”阿_拉_伯”

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.前端性能优化

  • 前端架构的核心是反向代理服务器Squid集群,由LVS负载均衡,在反向代理之前,通过CDN返回。

  • Wikipedia CDN缓存的准则:内容页面不包含动态信息;每个内容页面有唯一的REST风格的URL;在HTML响应头写入缓存控制信息;

2.服务端性能优化:使用APC、Imagemagick、Tex、替换PHP的字符串查找函数starter()使用更优化的算法

3.后端性能优化:

缓存

  • 热点特别集中的数据直接缓存到应用服务器的本地内存中

  • 缓存数据的内容尽量是应用服务器可以直接使用的格式

  • 使用缓存服务器存储session对象

  • 相比数据库,Memcached的持久化连接非常廉价,有需要就创建一个

MySQL

  • 使用较大的服务器内存

  • 使用RAID0磁盘阵列以回事访问

  • 将数据库事务一致性设置在较低水平

  • 如果Master数据库宕机,立即将应用切换到Salve数据库,同时关闭写服务

十一、海量分布式存储系统Doris的高可用架构设计分析

对于一个数据存储系统而言,高可用意味着:高可用的服务、高可靠的数据

A.分布式存储系统的高可用架构

1.冗余:服务器热备、数据多份存储

2.系统整体划分:

  • 应用程序服务器:存储系统的客户,对系统发起数据操作请求

  • 数据存储服务器:存储系统的核心,存储数据、响应应用服务器的数据操作请求

  • 管理中心服务器:由两台机器组成的主-主热备的小规模服务器集群,负责集群管理,对数据存储集群进行健康心跳检测;集群扩容、故障恢复管理;对应用程序服务器提供集群地址配置信息服务等

B.不同故障情况下的高可用解决方案

1.分布式存储系统的故障分类:瞬时故障、临时故障、永久故障

2.瞬时故障解决:多次重试

3.临时故障解决:需要人工干预,有问题服务器使用临时存储服务器

4.永久故障解决:启用备用服务器替代永久失效服务器

十二、网购秒杀系统架构设计案例分析

A.秒杀活动的技术挑战:对现有网站业务造成冲击、高并发下的应用,数据库负载、突然增加的网络及服务器带宽、直接下单

B.秒杀系统的应对策略

  • 秒杀系统独立部署

  • 秒杀商品页面静态化

  • 租借秒杀活动网络带宽

  • 动态生成随机下单页面URL

C.秒杀系统架构设计

1.如何控制秒杀商品页面购买按钮的点亮:使用一个JS文件,开始时修改其中内容,每次都请求,不被CDN等缓存,使用随机版本号。

2.如何只允许第一个提交的订单被发送到订单子系统:控制进入下单页面的入口,只有少数用户能进入,其他用户直接进入秒杀结束页面。比如10台服务器,每台处理10个请求,当请求超过10个,其他返回错误,再请求全局缓存记录,如果是第一个,进入订单页面,其他返回失败。

十三、大型网站典型故障案例分析

A.写日志也会引发故障

  • 应用程序自己的日志输出配置和第三方组件日志输出要分别配置

  • 检查log配置文件,日志来玩吧米歇尔考虑至少为Warn

  • 需要关闭某些第三方组件可能输出的太多Error日志

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:

  • 把“我的问题”表述成“我们的问题”

  • 给上司提封闭式问题(给出AB方案让上司选择哪个更好),给下属提开放式问题

  • 指出问题而不是批评人

  • 用赞同的方式提出问题

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.数据中心机房架构

机房、机柜、服务器 

本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
编程开发
相关文章 更多
C++动态数组初始化怎么写?常用语句与代码示例
C++动态数组初始化怎么写?常用语句与代码示例

深入解析C++中动态数组的初始化机制,涵盖new操作符的不同用法、基本类型与类对象的初始化差异,以及为何在现代C++开发中应优先使用std::vector。

using namespace 使用中遇到的问题怎么解决
using namespace 使用中遇到的问题怎么解决

命名空间的基本概念与常见引入问题在C++等编程语言中,命名空间(namespace)是一种将代码标识符(如变量、函数、类名)封装在特定名称下的机制,其主要目的是避免命名冲突,尤其是在大型项目或使用多个第三方库时。使用“using namespace”指令可以将指定命名空间中的所有名称引入当前作用域,

c语言函数递归 实操经验总结:这些技巧很实用
c语言函数递归 实操经验总结:这些技巧很实用

理解递归的基本原理在C语言中,递归是一种函数调用自身的编程技术。要掌握它,首先需要理解其核心思想:将一个复杂的大问题,分解为一个或几个与原问题相似但规模更小的子问题,直到子问题足够简单,可以直接求解。这个过程通常包含两个关键部分:递归出口和递归体。递归出口定义了问题何时不再继续分解,即最简单、可直接

c语言函数递归 怎么选?常见方案对比分析
c语言函数递归 怎么选?常见方案对比分析

递归函数的基本概念与适用场景在C语言编程中,递归是一种函数调用自身的编程技巧。它并非适用于所有问题,但在处理某些具有自相似结构的问题时,能提供极其清晰和优雅的解决方案。递归的核心思想是将一个大规模问题分解为一个或多个同类型但规模更小的子问题,直到子问题简单到可以直接求解。典型的适用场景包括树形结构的

Objective-C 内存管理入门:从 alloc 到 dealloc 的生命周期详解
Objective-C 内存管理入门:从 alloc 到 dealloc 的生命周期详解

理解内存管理的基石在Objective-C的编程世界中,内存管理是开发者必须掌握的核心技能之一。它直接关系到应用的性能、稳定性与资源利用效率。与一些采用自动垃圾回收机制的语言不同,Objective-C在很长一段时间里,依赖一套基于引用计数的、需要开发者部分介入的管理规则。这套规则的核心思想是明确的

如何正确使用 dealloc 以避免 iOS 应用中的内存泄漏
如何正确使用 dealloc 以避免 iOS 应用中的内存泄漏

理解 dealloc 的角色与时机在 iOS 应用开发中,内存管理是保障应用性能与稳定性的基石。dealloc 方法是 Objective-C 中对象生命周期结束时的关键回调,它标志着对象即将被系统回收内存。正确理解其触发时机至关重要:当一个对象的引用计数降为零时,运行时系统会自动调用该对象的 de

深入理解 Objective-C 中的 dealloc 方法:内存管理核心机制
深入理解 Objective-C 中的 dealloc 方法:内存管理核心机制

内存管理的基石在Objective-C的世界里,内存管理是开发者必须掌握的核心技能之一。作为一门在手动引用计数(MRC)时代诞生的语言,Objective-C要求程序员对对象的生命周期有清晰的认识。dealloc方法正是这一生命周期中至关重要的终点站。它是一个实例方法,当对象的引用计数降为零时,系统

理解 native2ascii:Java 国际化开发中的字符编码工具
理解 native2ascii:Java 国际化开发中的字符编码工具

native2ascii 工具的基本定位在Ja va应用程序的国际化与本地化开发过程中,处理非拉丁字符集是一个常见且关键的环节。Ja va内部使用Unicode字符集来统一表示全球各种语言的文字,但其属性文件(.properties)在历史上要求使用ASCII编码,或者更准确地说,要求非ASCII字

如何使用 native2ascii 转换中文字符为 Unicode 转义序列
如何使用 native2ascii 转换中文字符为 Unicode 转义序列

理解 native2ascii 工具的基本用途在软件开发,特别是涉及国际化处理的场景中,开发者常常需要处理不同编码的文本资源。native2ascii 是 Ja va 开发工具包(JDK)中提供的一个命令行实用程序,其主要功能是将包含本地字符编码(非ASCII字符)的文件,转换为包含 Unicode

Java native2ascii 命令详解:解决属性文件乱码问题
Java native2ascii 命令详解:解决属性文件乱码问题

native2ascii 命令的由来与作用在Ja va开发中,处理国际化资源文件是一个常见需求。资源文件通常以.properties格式存储,用于支持多语言界面。然而,Ja va属性文件默认采用ISO-8859-1字符集编码,这导致了一个直接的问题:当文件中包含非拉丁字符(如中文、日文、韩文等)时,

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件
macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

Mac软件 更多
灵活计算器
灵活计算器
macOS/iOS/Android

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师
macOS

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

WINDOWS 更多
Windows 10
Windows 10
Windows

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘
Windows/macOS/iOS/Android

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。