Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The design of scalable architecture
Search
Bruce Dou
May 26, 2013
Technology
4.8k
11
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
The design of scalable architecture
关于产品架构和 Web 后端架构设计
Bruce Dou
May 26, 2013
More Decks by Bruce Dou
See All by Bruce Dou
Coroutine Based Concurrency with PHP and Swoole
doubaokun
3
4.5k
Preemptive multitasking using coroutines in PHP Swoole
doubaokun
0
310
Asynchronous programming with PHP
doubaokun
1
13k
High available Message Queue: RabbitMQ
doubaokun
4
3.1k
Other Decks in Technology
See All in Technology
Unlocking the Apps
pimterry
0
230
先取りMaven4 ~16年ぶりのメジャーアップデート、その進化とは?~
ogiwarat
0
140
データ基盤をDataformで整えた話 〜 開発環境を添えて 〜
takapy
0
110
AI Engineering Summit Tokyo 2026 AIの前に、やることがある 〜医療データ企業の4フェーズ〜
dtaniwaki
0
1.8k
Agentic Web
dynamis
1
130
地元にいないローカルオーガナイザーの立ち回り
uvb_76
1
470
2026.06.13_AI時代に事業会社が「SIer出身エンジニア」を求める理由 / Why Businesses Seek Engineers with a System Integrator Background in the AI Era
jumtech
0
500
探して_入れて_作って_使う_Agent_Skills___LT.pdf
peintangos
2
160
個人最適 から 全体最適 へ AI情報共有会・AIギルド・AI-DLC で進める カンリーの組織展開
rfdnxbro
0
1.5k
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development
yoshidashingo
1
360
サプライチェーンセキュリティの空白地帯 - 信頼できる”依存性”の未来を考える
rung
PRO
2
690
美味しいスイスチーズを作ろう🧀🐭
taigamikami
1
240
Featured
See All Featured
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
280
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
590
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
360
KATA
mclloyd
PRO
35
15k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
860
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
200
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
New Earth Scene 8
popppiees
3
2.3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
240
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
570
Transcript
可扩展的架构设计 关于产品架构和 Web 后端架构 Bruce Dou May, 2013 可扩展的架构设计 http://blog.eood.cn
http://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:
[email protected]
Blog: http://blog.eood.cn/ 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
分享内容⼤大纲 • 什么是架构,宏观和微观架构 • 架构的本质和存在的价值 • 架构实施和优化的普适⽅方法 • 可扩展的产品架构 •
可扩展的 Web 后端架构 • 如何实现可扩展的 Web 后端架构 • 流⾏行的 Web 架构模式和开源模块 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
什么是架构,宏观和微观架构 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
⼈人们常谈论到的架构 • 信息架构 • 产品架构 • Web 架构:前端架构、后端架构 • 团队架构
• 等等 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
⼈人们常谈论到的架构 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
我理解的架构 架构是规划、选择、组织、组合、优化 (⻓长期的 A/B testing、迭代的过程) 宏观架构:总体规划,⽐比如,产品线的定义 微观架构:具体的实现⽅方式 今天只讨论微观产品架构、Web 后端架构 可扩展的架构设计
http://blog.eood.cn http://t.cn/zHxOsAx
⼤大家都熟悉的架构活动 编程开发活动可以看做是⼀一种微观架构设计 该使⽤用内存还是⽂文件系统还是⺴⽹网络, 需要权衡成本、执⾏行性能、 延时各个⽅方⾯面。 类、函数、对象、⽅方法如何组织才能减少重复性⼯工作、适应需 求变化。 产品策划和设计活动也可以看做是⼀一种架构设计 该使⽤用什么样的布局、什么样的配⾊色组合, ⼤大量的信息如何合理
得传递给⽤用户,主次的区分。 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
题外:每个程序员都应该知道的延迟数 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
架构的本质和存在的价值 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
架构的本质和存在价值 对于组织来说 1 降低⻓长期成本(中⻓长期的优化) 2 降低⻛风险(可增减、可预期) 3 适应市场、业务、⽤用户的增⻓长 对于组织个体来说 1
⼈人员活动更⾼高效 (⽂文档化,摩擦更少、沟通耗费的时间更少、对 业务理解更⼀一致) 2 提⾼高⽣生产⼒力 3 少加班、更多的⾃自由时间学习新东⻄西提⾼高综合能⼒力 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
架构实施和优化的普适⽅方法 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
架构实施和优化的普适⽅方法 架构是⼀一个不断衡量 ROI、做选择、决策、预测、实施、测试, 迭代试错的过程 可维护、并⾏行、分层、分区、隔离、 冗余、备份、重⽤用、可测、可伸缩、 可通信、监控、平衡、互补、异步、 缓冲、缓存、故障检测、⾃自恢复、重 试、限流、分布式决策、虚拟化、⾃自 动化、⾃自竞争
可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
可扩展的产品架构 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
可扩展的微观产品架构 适应⽤用户群体的增⻓长(男⼈人、⼥女⼈人、其他/⾃自购、送⼈人、代购/ ⽼老⼈人、⼩小孩/Web、Mobile) (KISS) 视觉感受(⻚页⾯面横向宽度的限制,纵向是可扩展的) 分⻚页是⼀一 种可扩展的例⼦子、视觉组合(Spaces) 使⽤用体验(⼀一致性的响应时间、⼀一致性的查找⺫⽬目标的成本) 适应功能的持续添加和删减(要求更⾼高) (结构尽量松耦合)
弹性伸缩,可增可减 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
可扩展的微观产品架构的⼀一些例⼦子和实践 List 可增⻓长 1-N Menu 可增⻓长 1-N 松耦合和留空⽩白,任何⼀一个部件都应该是可有可⽆无的,任何 ⼀一个组件都应该有存在的原因(Cool不是原因) 简化意味着更强的适应性
衡量ROI,使⽤用⽤用户已经熟悉的控件和⾏行为模式 激励反馈模式 ⽤用户群体的增⻓长和划分 可以不断加减功能 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
可扩展的Web后端架构 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
可扩展的 Web 架构 运维很轻松: ⾃自动化、进程当了会⾃自动补充、机器当了会⾃自 动切换到备机、可以回头处理故障、有更充裕的时间 运营想促销就促销: 发红包不⽤用考虑技术问题 产品的需求都能实现:(实时性的需求)、想要什么功能都能 实现、局限更少
开发⼈人员很 Happy: 更多的重⽤用、少了很多重复性的⼯工作、 对⾃自⼰己的领域可以研究得更深⼊入(职业发展) Boss 很 Happy: ⺴⽹网站不停机不当机(每个部件故障或者消 失、被隔离都不影响整体运作) 弹性架构、⾃自动根据业务量⽤用户量增加减少机器、进程、各个组 件。 服务各司其职、不需要了解完整的业务、只需要了解接⼝口、⿊黑盒 抽象、隔离忧虑。 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
如何实现可扩展的 Web 后端架构 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
Web 架构扩展的 2 种⽅方式 Scaling up: Better machine, but expensive
Scaling out: More cheap machines,open source, no licence fee 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
如何实现可扩展的 Web 架构 (1) 通过接⼝口和协议沟通 (不需要了解内部实现⽅方式、只需要了解实现了什 么)(降低通信消耗) 松耦合: 意味着可以实现更⾼高的性能(可以只优化瓶颈) 切忌以某个组件为
中⼼心的模式,⽐比如以数据库为中⼼心的架构 SOA 每个组件提供⼀一种服务,服务直接通过接⼝口和协议进⾏行通信 服务保证 SLA 单⼀一服务性能可测、整体⽀支撑性能可测并且可预测 (祈祷 撑得住是⼀一种⾼高⻛风险的做法) 同样服务有多个实例、之间互为冗余、互为备份 (服务性能可测) 服务可以分级, 集中优化瓶颈实现更⾼高整体性能 服务可以重⽤用、减少了⼯工作量 服务更容易测试、运维、部署、分版本、迭代开发、测量性能、跟踪⽇日 志 可以区分实时性需求和不需要实时性的需求,异步处理⾮非实时性需求 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
如何实现可扩展的 Web 架构 (2) 单⼀一的服务更容易开发,不需要考虑太多牵扯的内容。开发⼈人员的实现 ⽅方式可以更深⼊入、减少了⼯工作量。 可以实现异构、使⽤用任何语⾔言、任何框架 服务之间可以隔离、当的也许只是⼀一个不重要的服务,减少了整体损 失。不重要的服务在特性情况下可以关闭。 服务部件可替换:性能不好、语⾔言不爽、有了更好的开源产品
核⼼心数据库承担尽量少的⼯工作、并且做 Sharding (⼒力⽓气再⼤大的⽜牛所拉⻋车的 重量也是有限的,CPU 主频达到极限) 服务⽆无状态和状态的中⼼心化 分层次 (例⼦子:Router App Cache MQ DB) 分区域 (例⼦子: Sharding、业务的拆分) Naming service (虚拟化) ⾃自动化、分布式、开源 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx
流⾏行的 Web 架构模式和开源模块 可扩展的架构设计 http://blog.eood.cn http://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.cn http://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.cn http://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.cn http://t.cn/zHxOsAx
Q & A 可扩展的架构设计 http://blog.eood.cn http://t.cn/zHxOsAx