SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
可扩展的架构设计
关于产品架构和 Web 后端架构
Bruce Dou
May, 2013
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
关于我
• 语⾔言控:PHP、JavaScript(Node.js)、Java、Ruby、Python、Erlang、C
• 原理控:对系统内部的细节感兴趣
• 新技术发烧友:关注开源项⺫⽬目
• 关注前端架构:HTML5、Backbone.js、⾃自动化部署
• 关注应⽤用层框架:Drupal、Ruby on Rails、Django、Express.js
• 关注数据库:MySQL、Redis、MC、MongoDB
• 其他关注点:产品设计、UX、分布式、HA、⾃自动化运维
Github: http://github.com/doubaokun
Twitter: @chinadrupaller
Weibo: @Erlang
Email: doubaokun@gmail.com
Blog: http://blog.eood.cn/
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
分享内容⼤大纲
• 什么是架构,宏观和微观架构
• 架构的本质和存在的价值
• 架构实施和优化的普适⽅方法
• 可扩展的产品架构
• 可扩展的 Web 后端架构
• 如何实现可扩展的 Web 后端架构
• 流⾏行的 Web 架构模式和开源模块
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
什么是架构,宏观和微观架构
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
⼈人们常谈论到的架构
• 信息架构
• 产品架构
• Web 架构:前端架构、后端架构
• 团队架构
• 等等
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
⼈人们常谈论到的架构
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
我理解的架构
架构是规划、选择、组织、组合、优化 (⻓长期的
A/B testing、迭代的过程)
宏观架构:总体规划,⽐比如,产品线的定义
微观架构:具体的实现⽅方式
今天只讨论微观产品架构、Web 后端架构
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
⼤大家都熟悉的架构活动
编程开发活动可以看做是⼀一种微观架构设计
该使⽤用内存还是⽂文件系统还是⺴⽹网络, 需要权衡成本、执⾏行性能、
延时各个⽅方⾯面。
类、函数、对象、⽅方法如何组织才能减少重复性⼯工作、适应需
求变化。
产品策划和设计活动也可以看做是⼀一种架构设计
该使⽤用什么样的布局、什么样的配⾊色组合, ⼤大量的信息如何合理
得传递给⽤用户,主次的区分。
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
题外:每个程序员都应该知道的延迟数
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
架构的本质和存在的价值
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
架构的本质和存在价值
对于组织来说
1 降低⻓长期成本(中⻓长期的优化)
2 降低⻛风险(可增减、可预期)
3 适应市场、业务、⽤用户的增⻓长
对于组织个体来说
1 ⼈人员活动更⾼高效 (⽂文档化,摩擦更少、沟通耗费的时间更少、对
业务理解更⼀一致)
2 提⾼高⽣生产⼒力
3 少加班、更多的⾃自由时间学习新东⻄西提⾼高综合能⼒力
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
架构实施和优化的普适⽅方法
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
架构实施和优化的普适⽅方法
架构是⼀一个不断衡量 ROI、做选择、决策、预测、实施、测试,
迭代试错的过程
可维护、并⾏行、分层、分区、隔离、
冗余、备份、重⽤用、可测、可伸缩、
可通信、监控、平衡、互补、异步、
缓冲、缓存、故障检测、⾃自恢复、重
试、限流、分布式决策、虚拟化、⾃自
动化、⾃自竞争
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
可扩展的产品架构
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
可扩展的微观产品架构
适应⽤用户群体的增⻓长(男⼈人、⼥女⼈人、其他/⾃自购、送⼈人、代购/
⽼老⼈人、⼩小孩/Web、Mobile) (KISS)
视觉感受(⻚页⾯面横向宽度的限制,纵向是可扩展的) 分⻚页是⼀一
种可扩展的例⼦子、视觉组合(Spaces)
使⽤用体验(⼀一致性的响应时间、⼀一致性的查找⺫⽬目标的成本)
适应功能的持续添加和删减(要求更⾼高) (结构尽量松耦合)
弹性伸缩,可增可减
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
可扩展的微观产品架构的⼀一些例⼦子和实践
List 可增⻓长 1-N
Menu 可增⻓长 1-N
松耦合和留空⽩白,任何⼀一个部件都应该是可有可⽆无的,任何
⼀一个组件都应该有存在的原因(Cool不是原因)
简化意味着更强的适应性
衡量ROI,使⽤用⽤用户已经熟悉的控件和⾏行为模式
激励反馈模式
⽤用户群体的增⻓长和划分
可以不断加减功能
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
可扩展的Web后端架构
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
可扩展的 Web 架构
运维很轻松: ⾃自动化、进程当了会⾃自动补充、机器当了会⾃自
动切换到备机、可以回头处理故障、有更充裕的时间
运营想促销就促销: 发红包不⽤用考虑技术问题
产品的需求都能实现:(实时性的需求)、想要什么功能都能
实现、局限更少
开发⼈人员很 Happy: 更多的重⽤用、少了很多重复性的⼯工作、
对⾃自⼰己的领域可以研究得更深⼊入(职业发展)
Boss 很 Happy: ⺴⽹网站不停机不当机(每个部件故障或者消
失、被隔离都不影响整体运作)
弹性架构、⾃自动根据业务量⽤用户量增加减少机器、进程、各个组
件。
服务各司其职、不需要了解完整的业务、只需要了解接⼝口、⿊黑盒
抽象、隔离忧虑。
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
如何实现可扩展的 Web 后端架构
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
Web 架构扩展的 2 种⽅方式
Scaling up: Better machine, but expensive
Scaling out: More cheap machines,open source, no licence
fee
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
如何实现可扩展的 Web 架构 (1)
通过接⼝口和协议沟通 (不需要了解内部实现⽅方式、只需要了解实现了什
么)(降低通信消耗)
松耦合: 意味着可以实现更⾼高的性能(可以只优化瓶颈) 切忌以某个组件为
中⼼心的模式,⽐比如以数据库为中⼼心的架构
SOA 每个组件提供⼀一种服务,服务直接通过接⼝口和协议进⾏行通信
服务保证 SLA 单⼀一服务性能可测、整体⽀支撑性能可测并且可预测 (祈祷
撑得住是⼀一种⾼高⻛风险的做法)
同样服务有多个实例、之间互为冗余、互为备份 (服务性能可测)
服务可以分级, 集中优化瓶颈实现更⾼高整体性能
服务可以重⽤用、减少了⼯工作量
服务更容易测试、运维、部署、分版本、迭代开发、测量性能、跟踪⽇日
志
可以区分实时性需求和不需要实时性的需求,异步处理⾮非实时性需求
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
如何实现可扩展的 Web 架构 (2)
单⼀一的服务更容易开发,不需要考虑太多牵扯的内容。开发⼈人员的实现
⽅方式可以更深⼊入、减少了⼯工作量。
可以实现异构、使⽤用任何语⾔言、任何框架
服务之间可以隔离、当的也许只是⼀一个不重要的服务,减少了整体损
失。不重要的服务在特性情况下可以关闭。
服务部件可替换:性能不好、语⾔言不爽、有了更好的开源产品
核⼼心数据库承担尽量少的⼯工作、并且做 Sharding (⼒力⽓气再⼤大的⽜牛所拉⻋车的
重量也是有限的,CPU 主频达到极限)
服务⽆无状态和状态的中⼼心化
分层次 (例⼦子:Router App Cache MQ DB)
分区域 (例⼦子: Sharding、业务的拆分)
Naming service (虚拟化)
⾃自动化、分布式、开源
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
流⾏行的 Web 架构模式和开源模块
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
流⾏行的 Web 架构模式
Client-Server、Browser-Server
Database-centric: (Most small website)
ESB (Enterprise Service Bus)
Event Driven and Async:(Most GUI、Most Proxy)
Message Queue、Task Queue
SOA:RESTful、SOAP、XMLRPC、Thrift
P2P
Share nothing (Stateless)
Layered (分层)
Map-Reduce
数据库的 Sharding、Router
数据库的 Master-Slave、Replica
⼤大前端 (包括了服务端渲染和浏览器端渲染)
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
Web 架构中常⻅见的开源模块
分布式协同: Zookeeper
负载均衡: LVS(Layer 4), HAProxy(Layer 4、 7), Nginx(Layer 7)
虚拟化: LXC、KVM、Xen
HA:Keepalived、Heartbeat
分布式缓存: Memcache, Redis
消息队列: 0MQ, Beanstalkd、Gearman、etc
监控和⾃自恢复⼯工具: Supervised, Monit, Forever, etc
Storage RDMS:MySQL、Postgres
Storage K-V DB: MySQL(handlersocket)、Redis、Hbase、LevelDB、
Riak、S3
Internal DNS:dnsmasq
集中 Logging、图表:Logstash、Graphite
压测⼯工具:Tcpcopy、EM-Proxy、Seige、Tsung
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
⼀一些有⽤用的链接
• http://ggatz.com/images/Enterprise_20Integration_20-_20SOA_20vs_20EAI_20vs_20ESB.pdf
• http://www.slideshare.net/erichleipold/SOA-ESB-Presentation
• http://jasonwilder.com/blog/2012/01/03/centralized-logging/
• https://code.google.com/p/tcpcopy/
• https://github.com/igrigorik/em-proxy
• http://zookeeper.apache.org/
• http://www.linuxvirtualserver.org/
• http://www.ibm.com/developerworks/cn/linux/l-lxc-containers/
• http://tsung.erlang-projects.org/
• http://code.google.com/p/leveldb/
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx
Q & A
可扩展的架构设计 http://blog.eood.cnhttp://t.cn/zHxOsAx

Contenu connexe

En vedette

【第一季第五期】要漂亮很容易!——超简单CSS速成教程
【第一季第五期】要漂亮很容易!——超简单CSS速成教程【第一季第五期】要漂亮很容易!——超简单CSS速成教程
【第一季第五期】要漂亮很容易!——超简单CSS速成教程tbosstraining
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训longhao
 
编辑器设计Kissy editor
编辑器设计Kissy editor编辑器设计Kissy editor
编辑器设计Kissy editortaobao.com
 
第三方内容开发最佳实践
第三方内容开发最佳实践第三方内容开发最佳实践
第三方内容开发最佳实践taobao.com
 
淘宝实验室(Taobao labs)产品介绍 d2
淘宝实验室(Taobao labs)产品介绍 d2淘宝实验室(Taobao labs)产品介绍 d2
淘宝实验室(Taobao labs)产品介绍 d2taobao.com
 
动态 Css sprite
动态 Css sprite动态 Css sprite
动态 Css spritetaobao.com
 
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具taobao.com
 

En vedette (7)

【第一季第五期】要漂亮很容易!——超简单CSS速成教程
【第一季第五期】要漂亮很容易!——超简单CSS速成教程【第一季第五期】要漂亮很容易!——超简单CSS速成教程
【第一季第五期】要漂亮很容易!——超简单CSS速成教程
 
Java并发编程培训
Java并发编程培训Java并发编程培训
Java并发编程培训
 
编辑器设计Kissy editor
编辑器设计Kissy editor编辑器设计Kissy editor
编辑器设计Kissy editor
 
第三方内容开发最佳实践
第三方内容开发最佳实践第三方内容开发最佳实践
第三方内容开发最佳实践
 
淘宝实验室(Taobao labs)产品介绍 d2
淘宝实验室(Taobao labs)产品介绍 d2淘宝实验室(Taobao labs)产品介绍 d2
淘宝实验室(Taobao labs)产品介绍 d2
 
动态 Css sprite
动态 Css sprite动态 Css sprite
动态 Css sprite
 
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具
 

Similaire à 可扩展的架构设计

實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)Gelis Wu
 
網站規劃
網站規劃網站規劃
網站規劃jiannrong
 
应用开发一般工作流程和注意
应用开发一般工作流程和注意应用开发一般工作流程和注意
应用开发一般工作流程和注意cucued
 
選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅Shengyou Fan
 
Artifacts management with CI and CD
Artifacts management with CI and CDArtifacts management with CI and CD
Artifacts management with CI and CDChen-Tien Tsai
 
常用Js框架比较
常用Js框架比较常用Js框架比较
常用Js框架比较Adam Lu
 
Langchain and Azure ML and Open AI
Langchain and Azure ML and Open AILangchain and Azure ML and Open AI
Langchain and Azure ML and Open AIKo Ko
 
[DCTPE2010] 從企劃到開發維護的 Drupal 專案經驗
[DCTPE2010] 從企劃到開發維護的 Drupal 專案經驗[DCTPE2010] 從企劃到開發維護的 Drupal 專案經驗
[DCTPE2010] 從企劃到開發維護的 Drupal 專案經驗Drupal Taiwan
 
前端开发的那些事儿
前端开发的那些事儿前端开发的那些事儿
前端开发的那些事儿jndream
 
Drupal7第一堂
Drupal7第一堂Drupal7第一堂
Drupal7第一堂Hen Chen
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介pan weizeng
 
使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心Du Yamin
 
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)Duran Hsieh
 
6.twitter bootstrap 元件介紹
6.twitter bootstrap 元件介紹6.twitter bootstrap 元件介紹
6.twitter bootstrap 元件介紹Nelson Chen
 
Rest与面向资源的web开发
Rest与面向资源的web开发Rest与面向资源的web开发
Rest与面向资源的web开发topgeek
 
白玉磊 Webrebuild
白玉磊 Webrebuild白玉磊 Webrebuild
白玉磊 Webrebuild裕波 周
 
石玉磊 Web rebuild
石玉磊 Web rebuild石玉磊 Web rebuild
石玉磊 Web rebuildWebrebuild
 
如何,高效利用搜索引擎+构建网络工具箱
如何,高效利用搜索引擎+构建网络工具箱如何,高效利用搜索引擎+构建网络工具箱
如何,高效利用搜索引擎+构建网络工具箱84zhu
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平drewz lin
 
基于架构的开发模式
基于架构的开发模式基于架构的开发模式
基于架构的开发模式thinkinlamp
 

Similaire à 可扩展的架构设计 (20)

實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)實踐 Clean Architecture(實作高可用性的軟件架構)
實踐 Clean Architecture(實作高可用性的軟件架構)
 
網站規劃
網站規劃網站規劃
網站規劃
 
应用开发一般工作流程和注意
应用开发一般工作流程和注意应用开发一般工作流程和注意
应用开发一般工作流程和注意
 
選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅選一個框架當好朋友,讓您成為開心攻城獅
選一個框架當好朋友,讓您成為開心攻城獅
 
Artifacts management with CI and CD
Artifacts management with CI and CDArtifacts management with CI and CD
Artifacts management with CI and CD
 
常用Js框架比较
常用Js框架比较常用Js框架比较
常用Js框架比较
 
Langchain and Azure ML and Open AI
Langchain and Azure ML and Open AILangchain and Azure ML and Open AI
Langchain and Azure ML and Open AI
 
[DCTPE2010] 從企劃到開發維護的 Drupal 專案經驗
[DCTPE2010] 從企劃到開發維護的 Drupal 專案經驗[DCTPE2010] 從企劃到開發維護的 Drupal 專案經驗
[DCTPE2010] 從企劃到開發維護的 Drupal 專案經驗
 
前端开发的那些事儿
前端开发的那些事儿前端开发的那些事儿
前端开发的那些事儿
 
Drupal7第一堂
Drupal7第一堂Drupal7第一堂
Drupal7第一堂
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心使用GoogleAppEngine建立个人信息中心
使用GoogleAppEngine建立个人信息中心
 
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練1(20160222)
 
6.twitter bootstrap 元件介紹
6.twitter bootstrap 元件介紹6.twitter bootstrap 元件介紹
6.twitter bootstrap 元件介紹
 
Rest与面向资源的web开发
Rest与面向资源的web开发Rest与面向资源的web开发
Rest与面向资源的web开发
 
白玉磊 Webrebuild
白玉磊 Webrebuild白玉磊 Webrebuild
白玉磊 Webrebuild
 
石玉磊 Web rebuild
石玉磊 Web rebuild石玉磊 Web rebuild
石玉磊 Web rebuild
 
如何,高效利用搜索引擎+构建网络工具箱
如何,高效利用搜索引擎+构建网络工具箱如何,高效利用搜索引擎+构建网络工具箱
如何,高效利用搜索引擎+构建网络工具箱
 
Top100summit前端的云时代支付宝前端平台架构 王保平
Top100summit前端的云时代支付宝前端平台架构  王保平Top100summit前端的云时代支付宝前端平台架构  王保平
Top100summit前端的云时代支付宝前端平台架构 王保平
 
基于架构的开发模式
基于架构的开发模式基于架构的开发模式
基于架构的开发模式
 

可扩展的架构设计