可扩展的架构设计

cndkei

贡献于2016-02-08

字数:0 关键词: 软件架构

可扩展的架构设计 关于产品架构和 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

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档