`
aol_aog
  • 浏览: 16403 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

可伸缩性, 可用性和稳定性模式

阅读更多

由于难得一见的全面,需要反复多看几次,理清头绪。我下面 就逐步诠释一下:

(1)Scalability可伸缩性 , 可伸缩性 扣 住“状态”这个关键词,2006年我就写了一篇状态对象:数据库的替代者 ,应该说当时已经隐约感觉到了状态这根主线,如今在这个PPT得到全面诠释,非常 释然。状态又分为:
分区 Http缓存 RDBMS Sharding碎片 NoSQL 分布式缓存 , 数据网格,并发Concurrency.




PPT指出可伸缩性 是没有免费午餐,需要在 以下因素权衡:
性能和可伸缩性
什么是 性能问题?如果你的系统对于一个用户访问还很慢,那就是性能问题;
什么是可伸缩性 问 题?如果你的系统对一个用户来说是快的,但是在高访问量下就慢了。

延迟和吞吐量
你要为如下目标奋斗:用可接受的延 迟获得最大的吞吐量。

可用性和一致性
就是CAP原理,传统的集中式关系数据库只能获得CA。大量章节谈了NoSQL , 本站已经相关介绍,基本都已经涵括。

状态
在状态方面,首先谈的是Http缓存,反向代理:Varnish squid Nginx mode_proyx这些都很热门,通过CDN在离客户端最近布置状态服务器。

页面静态化主要归纳为 Precompute content方面,很多人喜欢将动态页面静态化,变成html,通过引入AJAX异步,也是一种可伸缩性 提 高手段,静态化实时性差,适合可以预先计算的页面,预先计算可以采取:朴素的crontab 或Java的Quartz框架,Gearman,hadoop云计算已经google的数据协议,亚马逊的Elastic MapReduce。通过设置http协议,使用客户端浏览器本地缓存 , 加长http中失效期限,这些在国内被归纳为SEO范畴,也是可伸缩性 一 个小章节。


(2)可用性这里意思应该是我们通常的可靠性概念,可用性包括复制Replication和失败恢复 failover(过去称为集群 )。




何为可用性?是99.999%在线运行。7x24全天候运行。PPT讲了failover的复杂性已经fail back。

Replication 复制性分Active复制(推)和Passive复制(拉),形式上分主从 双主 Tree和Buddy伙伴四种,这些技术是MySQL Oracle以及追求CP类NoSQL 数据库采取的同步策 略。
主从Master-slave:主用来读写,可多个slave用来读;双主则是两个都用来读写;伙伴复制采取一对一结伴,类似 Weblogic的集群 策 略。


(3)稳定性包括let it crash (Akaa框架) SEDA Throttling.




其他
PPT将传统关系数据库和NoSQL 归 纳为Service of Record SOR模式,讲了水平垂直伸缩,RDBMS的Sharding碎片技术包括分区和复制。

文章认 为:ORM +富模型Rich domain model是一种反模式 ,会导致你就把精力浪费在照料数据库上。
避免方式是:重新思 考你的数据,什么时候你需要ACID,什么时候可以从最终一致性中获得好处?不同种类数据有不同的需求。见本站过去讨论:ORM已经 是过去的事情

文章认为除了关系数据库以外,对象数据库如db4o 以及集群 , 如Terracotta兵马俑 ehcach都属于ACID。

缓存 概 念中,解释了什么是write-through,什么是write-behind,什么是缓存 的 Eviction驱逐策略 比如先进先出FIFO;

在message-passing模式中,提到了Erlang Scala的Actors模型,最早提出由1973的Carl Hewitt,他比传统的类Class概念更加符合OO

Actors 模式特点:share nothing;隔离轻量处理,通过消息通讯;异步且非堵塞,因为不共享就不用同步。每个Actor有一个邮箱。

在 Dataflow并发中提到,数据是On-demand, lazy装载懒加载数据(jdonframeowork通过domain events实现数据随用随取,见其PPT说明 )

该PPT将domain events明确为EDA架构,当然还有我们讨论的CQRS。并对Event Sourcing事件源进行了说明,如果有事件记录,就无需ORM,只要持久化事件就可以。

总之,该PPT是对近期热点模式进行总结。值 得推荐一看。

并发Concurrency部分:
共享状态的并 发,也就是多线程模型,.NET和java C都是多线程模型,使用锁来实现状态共享,问题是:
锁要么少了 要么多了,要么加错锁,加锁策略很讲究,加不好就死锁。使用JDK 5以上的java.util.concurrent.* 并发包。

使 用Actor模型,能够克服多线程模型以上缺点,Scala或基于Java的akka 还有Groovy的GPars都提供Actor模型,其他基于JVM的Actor模型产品有:
• scalaz actors (Scala)
• Lift Actors (Scala)
• Scala Actors (Scala)
• Kilim (Java)
• Jetlang (Java)
• Actor’s Guild (Java)
• Actorom (Java)
• FunctionalJava (Java)
• GPars (Groovy)

STM基于内存的事务 , 类似数据库事务 有 begin commit abort/rollback,能够嵌套组合。基于JVM的STM产品有:
Akka (Java/Scala)
• Multiverse (Java)
• Clojure STM (Clojure)
• CCSTM (Scala)
• Deuce STM (Java)

在EDA架构中,包括下面几个方面:
• Domain Events
• Event Sourcing
• Command and Query Responsibility
Segregation (CQRS) pattern
• Event Stream Processing
• Messaging
• Enterprise Service Bus ESB
• Actors
• Enterprise Integration Architecture (EIA)

DDD原作者Evans对Domain events的认识是:
在过去几年中,一个概念越来越清楚:建立专门的模 型:Domain Events

Domain Events表达了对实体状态在某个时候发生重要改变的事件,使用事件模式来解耦系统,Domain Events给了我们一个更加清晰表达模型。

本 站关于领域事件主要文章:
Domain Events – 救世主
Domain Events异步应用
DCI,领域模型,领域事件的一些想法

关于Event Stream Processing可见 EDA: Event-Driven Architecture事件驱动架构

关于消息模 型,JMS是一种消息模式实现,主要有几种形式:
• Publish-Subscribe
• Point-to-Point
• Store-forward
• Request-Reply
具体产品有:
RabbitMQ (AMQP)
• ActiveMQ (JMS)
• Tibco
• MQSeries

关于ESB,曾经在SOA中讨论很多,主要产品有:
• ServiceMix (Open Source)
• Mule (Open Source)
• Open ESB (Open Source)
• Sonic ESB
• WebSphere ESB
• Oracle ESB
• Tibco
• BizTalk Server

关于CQRS,本站也有大量讨论,如:使用 CQRS重新考虑架构 等。

再来最后一段,网格计算,PPT把它等同于云计算 了。
分 而治之Divide and conquer原理:
1.将独立任务task分成几个job
2.并行执行这些job
3.聚合综合这 些job处理结果,合成返回结果。

在计算过程中,可以实现:
• Automatic provisioning自动配置
• Load balancing
• Fail-over
• Topology resolution

云计算产品有:
Google MapReduce
• Hadoop
• GigaSpaces
• GridGain

并行计算中重要概念UE: Unit of Execution执行单元,有以下:
• Process
• Thread
• Coroutine
• Actor
SPMD模式:Single Program Multiple Data,为所有UE使用一个程序,使用UE的ID选择通过该程序的不同路径,保持UE之间显式交互。

Master/Worker模式有 很好的可伸缩性 , 天生负载平衡。工作队列。
Loop Parallelism循环并行模式专门对付循环,循环就是瓶颈,将循环变成并行。

当任务 Task之间关系很简单时,使用Fork/Join模式:
Fork: 任务能够动态创建
Join: 任务之后可被中断,数据能被聚合。

还有稳定性模式,健壮性 鲁棒性,有下列几种模式:
• Timeouts
• Circuit Breaker
• Let-it-crash
• Fail fast
• Bulkheads
• Steady State
• Throttling

Timeouts超时:
时刻注意要用 超时,如:Thread.wait(timeout) 线程超时
• reentrantLock.tryLock 锁超时
• blockingQueue.poll(timeout, timeUnit)/
offer(..)
• futureTask.get(timeout, timeUnit) 这个很重要。
• socket.setSoTimeOut(timeout)

设定超时,就没有执着,就不会有硬伤,刚则易断,柔性无敌。

直 面崩溃,不要回避崩溃,管理它,处理过程监督,设立超级管理层,必要时,使用REST art 策略,分离应用错误和业务资源错误,校验,在开始计算前确保所有资源就绪,检查一下。使用日志记录跟踪。这些都和编程风格有关。

稳定性模 式应该不只这些,但是PPT已经结束,那就散了吧。


分享到:
评论

相关推荐

    网站架构技术

    永无止境:网站的可伸缩性 网站架构的伸缩性设计 不同功能进行物理分离实现伸缩 单一功能通过集群规模实现伸缩 应用服务器集群的伸缩性设计 http重定向负载均衡 DNS域名解析负载均衡 反向代理负载均衡 ...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    1.3.3易伸缩性 1.3.4低成本 1.3.5高吞吐量 1.4 RAC存在的问题 1.4.1稳定性 1.4.2高性能 1.5 RAC软件 1.5.1存储管理软件 1.5.2集群管理软件 1.5.3数据库管理软件 1.6本章小结 第2章 搭建类似生产环境的RAC...

    uReplicator:Apache Kafka Mirrormaker的改进

    强调uReplicator提供了具有高性能,可伸缩性和稳定性的Kafka复制解决方案。 uReplicator擅长: 高通量uReplicator具有一个控制器,可根据源群集中的吞吐量将分区分配给工作程序,因此每个工作程序均可实现最大吞吐量...

    CLR.via.C#.(中文第3版)(自制详细书签)Part1

    · 使用线程池、任务、取消、计时器和异步I/O操作来设计响应性强、稳定性高和伸缩性大的解决方案 · 借助于异常处理来进行状态管理 · 使用CLR寄宿、AppDomain、程序集加载、反射和C#的dynamic类型来构造具有动态...

    CLR.via.C#.(中文第3版)(自制详细书签)

    · 使用线程池、任务、取消、计时器和异步I/O操作来设计响应性强、稳定性高和伸缩性大的解决方案 · 借助于异常处理来进行状态管理 · 使用CLR寄宿、AppDomain、程序集加载、反射和C#的dynamic类型来构造具有动态...

    CLR.via.C#.(中文第3版)(自制详细书签)Part3

    · 使用线程池、任务、取消、计时器和异步I/O操作来设计响应性强、稳定性高和伸缩性大的解决方案 · 借助于异常处理来进行状态管理 · 使用CLR寄宿、AppDomain、程序集加载、反射和C#的dynamic类型来构造具有动态...

    CLR.via.C#.(中文第3版)(自制详细书签)Part2

    · 使用线程池、任务、取消、计时器和异步I/O操作来设计响应性强、稳定性高和伸缩性大的解决方案 · 借助于异常处理来进行状态管理 · 使用CLR寄宿、AppDomain、程序集加载、反射和C#的dynamic类型来构造具有动态...

    服务器虚拟化技术方案(1).doc

    3) 开放与兼容性原则:竹溪县民政局信息化平台建设不就是一个独立系统,而就是搭建一 下通用平台,基于平台承载各类应用系统运行,因此,系统设计应充分考虑其开放性 ,同时因发展需要,应具有较好的伸缩性,满足发展需要。...

    图书馆网络设计方案.pdf

    - - 2 二、技术选择 计算机网络课程设计 - - 3 根据需求为图书馆建立一个 OSPF(Open Shortest Path First)的快速以太网络,实现网 络的功能特性,可伸缩性,可适应性,可管理性以及节约成本和提高效率。OSPF 是一个...

    图书馆网络设计方案.doc

    二、技术选择 根据需求为图书馆建立一个OSPF(Open Shortest Path First)的快速以太网络,实现网络的功能特性,可伸缩性,可适应性,可管理性以及节 约成本和提高效率。OSPF是一个动态链路状态路由选择协议,它使用...

    Centos7 yum安装mongodb实现步骤详解

    复制和高可用性:支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目的是提供冗余及自动故障转移 自动分片:支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    具有很好的伸缩性,可跨越从运行Windows 95/98的膝上型电脑到运行Windows 2000的大型多处理器等多种平台使用。  6.对Web技术的支持,使用户能够很容易地将数据库中的数据发布到Web页面上。  7.SQL Server提供...

    软件架构师应该知道的97件事总结

    摩天大厦不可伸缩 混合开发的时代已经来临 性能至上 留意架构图里的空白区域 学习软件专业的行话 具体情境决定一切 侏儒、精灵、巫师和国王 向建筑师学习 避免重复 欢迎来到现实世界 仔细观察,别试图控制一切 架构...

    iWebshop3.1

    而 iWebShop 则与传统不同,它基于 iWebSI 的高性能越代架构技术平台体系开发,借助 iwebSI 平台的出色设计,iWebShop 站点具有高度的可扩展性和伸缩性,在低成本投入下可瞬间部署至高负载设备集群系统之上,当业务...

    服务器性能计算方法.doc

    靠性和高可用性,并注重设备的可扩展性和性价比,同时考虑满足 5 年业务系统的服务能力,建议数据库服务器配置一台 TPC-C 值不小 于 150 万的高性能小型机服务器,用做该情报系统的核心数据库服务 器。 本次我们建议...

    软件工程知识点

    其具有非常好的工作稳定性和安全保密性。但系统建设费用、运行费用比较高,灵活性不够好,结构不便于扩充。 (2)客户机/服务器结构 客户机/服务器结构依靠网络将计算任务分布到许多台不同的计算机上,但通过其中的...

    基于J2EE框架的个人博客系统项目毕业设计论...

    具有很好的伸缩性,可跨越从运行Windows 95/98的膝上型电脑到运行Windows 2000的大型多处理器等多种平台使用。  6.对Web技术的支持,使用户能够很容易地将数据库中的数据发布到Web页面上。  7.SQL Server提供...

    Java课程设计项目实例《基于微服务的在线签到》子系统.pdf

    基于单体架构的应用方式比较适合小型的项目,但是对于大型的应用项目不能再应用 单体架构,否则将使得系统的稳定性、扩展性和灵活性都很难满足要求。因此,需要分布 式的应用开发模式下的微服务架构。 2、微服务...

    KesionCMS v9.5.140605 免费正式版本(utf-8).rar

    系统在安全性、稳定性、易用性方面具有较高的声誉,深受广大站长推崇,其灵活的产品架构、极强的可扩展性和可伸缩性完全能最大化满足站长目前及今后的应用需求   人性化的管理操作平台,灵活的模板标签管理 人性...

    KesionCMS v9.5.140605 免费正式版(gbk).rar

    系统在安全性、稳定性、易用性方面具有较高的声誉,深受广大站长推崇,其灵活的产品架构、极强的可扩展性和可伸缩性完全能最大化满足站长目前及今后的应用需求   人性化的管理操作平台,灵活的模板标签管理 人性...

Global site tag (gtag.js) - Google Analytics