名词记忆

CAP理论,CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。java


Consistency(一致性), 数据一致更新,全部数据变更都是同步的
Availability(可用性), 好的响应性能
Partition tolerance(分区容错性) 可靠性程序员


定理:任何分布式系统只可同时知足二点,无法三者兼顾。
忠告:架构师不要将精力浪费在如何设计能知足三者的完美分布式系统,而是应该进行取舍。

关系数据库的ACID模型拥有 高一致性 + 可用性 很难进行分区:
Atomicity原子性:一个事务中全部操做都必须所有完成,要么所有不完成。
Consistency一致性. 在事务开始或结束时,数据库应该在一致状态。
Isolation隔离层. 事务将假定只有它本身在操做数据库,彼此不知晓。
Durability. 一旦事务完成,就不能返回。
跨数据库事务:2PC (two-phase commit), 2PC is the anti-scalability pattern (Pat Helland) 是反可伸缩模式的,JavaEE中的JTA事务能够支持2PC。由于2PC是反模式,尽可能不要使用2PC,使用BASE来回避。

BASE模型反ACID模型,彻底不一样ACID模型,牺牲高一致性,得到可用性或可靠性:
Basically Available基本可用。支持分区失败(e.g. sharding碎片划分数据库)
Soft state软状态 状态能够有一段时间不一样步,异步。
Eventually consistent最终一致,最终数据是一致的就能够了,而不是时时高一致。

BASE思想的主要实现有
1.按功能划分数据库
2.sharding碎片 

BASE思想主要强调基本的可用性,若是你须要High 可用性,也就是纯粹的高性能,那么就要以一致性或容错性为牺牲,BASE思想的方案在性能上仍是有潜力可挖的。

如今NOSQL运动丰富了拓展了BASE思想,可按照具体状况定制特别方案,好比忽视一致性,得到高可用性等等,NOSQL应该有下面两个流派:1. Key-Value存储,如Amaze Dynamo等,可根据CAP三原则灵活选择不一样倾向的数据库产品。2. 领域模型 + 分布式缓存 + 存储 (Qi4j和NoSql运动),可根据CAP三原则结合本身项目定制灵活的分布式方案,难度高。
这二者共同点:都是关系数据库SQL之外的可选方案,逻辑随着数据分布,任何模型均可以本身持久化,将数据处理和数据存储分离,将读和写分离,存储能够是异步或同步,取决于对一致性的要求程度。不一样点:NOSQL之类的Key-Value存储产品是和关系数据库头碰头的产品BOX,能够适合非Java如PHP RUBY等领域,是一种能够拿来就用的产品,而领域模型 + 分布式缓存 + 存储是一种复杂的架构解决方案,不是产品,但这种方式更灵活,更应该是架构师必须掌握的。web

 

一、RMI数据库

    使用java的程序员,对于RMI(RemoteMethod Invoke,远程方法调用)必定不陌生,在java中,为了在分布式应用开发时,可以方便调用远程对象,java提供了RMI的API。在 RMI 中,远程对象按照好象它是本地行事,客户机应用程序会直接调用远程对象存根上的方法,所以,调用起来就如本地对象同样方便。RMI中封装了对象和请求的网 络传送,使得异地的对象服务直接可用。编程

但RMI的使用必须是在可以识别java代码的环境下使用,即必须有JVM的支持。所以,他只适合在java程序间的对象通讯。若是不在 Java 环境下工做,或者须要与非 Java 环境通讯,那么SOAP、RPC、CORAR等都是能够的。.缓存

二、RPC & XML-RPC安全

       RPC(Remote Method Invocation,远端过程调用) 与RMI的区别很明显,相比于RMI直接获取远端方法的签名,进行调用的方式,RPC使用的是C/S方式,发送请求到服务器,等待服务器返回结果。服务器

为了包装RPC的请求信息,推出了XML-RPC,客户端发送一条特定消息,该消息中必须包括名称、运行服务的程序以及输入参数。网络

XML-RPC只能使用有限的数据类型种类和一些简单的数据结构。SOAP最主要的工做是使用标准的XML描述了RPC的请求信息(URI/类/方法/参数/返回值)。SOAP的方式,SOAP 是对如CORBA 和 RMI-IIOP 这样的重型 范例吸引人的替代。数据结构

三、SOAP

       SOAP的消息被称为一个SOAP Envelope,包括SOAP Header和SOAP Body。其中,SOAP Header能够方便的插入各类其它消息来扩充Web Service的功能,好比Security(采用证书访问Web Service),SOAP Body则是具体的消息正文,也就是Marshall后的信息。

       某些程序员天天挣扎于 Perl 和 C 组件、C 和 Java 组件之间的通讯。这些开发人员能够从转向基于 SOAP 或基于 XML-RPC 的通讯模型中获益匪浅。另外一方面,从不转向 Java 之外语言的 Java 开发人员能够转向 RMI 而不是使用 SOAP,他们会看到极大的性能改善。

四、WSDL

WSDL(Web Services Description Language)是描述web服务的,是描述怎样访问web服务的。WSDL是用来描述SOAP的,换句话说,WSDL 文件告诉你调用 SOAP 所须要知道的一切。WSDL也是一段xml。如今各个语言对wsdl的支持都很成熟,能够根据同一份wsdl文件生成本身语言的客户端。

五、REST

须要注意的是,REST是设计风格而不是标准。REST一般基于使用HTTP,URI,和XML标准通用标记语言下的一个子集)以及HTML(标准通用标记语言下的一个应用)这些现有的普遍流行的协议和标准。REST即表述性状态传递(英文:Representational State Transfer,简称REST)

 

 

RUP(Rational Unified Process), 统一软件开发过程统一软件过程)是一个 面向对象且基于网络的程序开发方法论。
瑞理统一过程(RUP)是Rational软件公司(Rational公司被IBM并购)创造的软件工程方法[1]   。RUP描述了如何有效地利用商业的可靠的方法开发和部署软件,是一种重量级过程(也被称做厚方法学),所以特别适用于大型软件团队开发大型项目。
 
RUP最重要的它有三大特色:1)软件开发是一个迭代过程,2)软件开发是由Use Case驱动的,3)软件开发是以架构设计(Architectural Design)为中心的。
 
CMMI全称是Capability Maturity Model Integration,即能力成熟度模型集成(也有称为:软件能力成熟度集成模型)[1]   ,是 美国国防部的一个设想,1994年由美国国防部(United States Department of Defense)与卡内基-梅隆大学(Carnegie-Mellon University)下的软件工程研究中心(Software Engineering Institute,SEISM)以及美国国防工业协会(National Defense Industrial Association)共同开发和研制的,他们计划把如今全部现存实施的与即将被发展出来的各类能力成熟度模型,集成到一个框架中去,申请此认证的前提条件是该企业具备有效的软件企业认定证书。
其目的是帮助软件企业对 软件工程过程进行管理和改进,加强开发与改进能力,从而能按时地、不超预算地开发出高质量的软件。其所依据的想法是:只要集中精力持续努力去创建有效的软件工程过程的基础结构,不断进行管理的实践和过程的改进,就能够克服软件开发中的困难。CMMI为改进一个组织的各类过程提供了一个单一的集成化框架,新的集成模型框架消除了各个模型的不一致性,减小了模型间的重复,增长透明度和理解,创建了一个自动的、可扩展的框架。于是可以从整体上改进组织的质量和效率。CMMI主要关注点就是成本效益、明确重点、过程集中和灵活性四个方面。
 

实施流程

阶段1:CMMI项目启动会
明确企业实施CMMI的商业目标,创建CMMI项目实施的沟通机制。
阶段2:CMMI基础培训和过程改进小组(EPG)组建
进行CMMI基础概念讲解,指导企业创建核心的过程改进小组。
阶段3:诊断
充分了解企业研发过程现状,识别企业现有软件过程与企业现阶段理应达到的CMMI成熟度级别的差距,提交诊断报告,进行过程改进的策划。
阶段4:过程域培训和文件定义
结合企业过程现状进行CMMI过程域培训,经过举例、案例分析等方式,让企业的EPG掌握过程文件定义技巧,结合企业实际状况有针对性的定义组织的研发过程,并肯定过程产出物(如:需求报告)
阶段5:项目试点
选择表明公司核心业务的项目或者典型项目进行试点,经过试点来完善过程文件,从而为企业全面推广过程文件打下基础。
阶段6:组织推广
全员参与全面导入与执行CMMI。
阶段7:预评估
验证组织推广的结果,识别企业尚存缺陷并制定再次改善方案,准备充分,以便企业可以更好进行正式SCAMPI评估。
阶段8:SCAMPI A 正式评估
由SEI受权的主任评估师领导,采用SCAMPI ( Standard CMMI Appraisal Method for Process Improvement)评估方法,对企业的能力成熟度进行正式的评估,颁发证书,经过SEI网站向全球发布企业信息。
CMMI主要内容及各过程域的相互关系
CMMI 二、3级共有18个过程域(PA),主要内容以下,分四大类:
  1、过程管理:
  1. OPD:组织级过程定义。
  2. OPF:组织级过程焦点。
  3. OT:组织培训管理。
  2、项目管理:
  4. PP:项目计划。
  5. PMC:项目监督与控制。
  6. SAM:供应商协议管理。
  7. IPM:集成项目管理。
  8. RSKM:风险管理。
3、工程管理:
9. REQM:需求管理。
10. RD:需求开发。
11. TS:技术解决方案。
  12. PI:产品集成。
  13. VER:验证。
  14. VAL:确认。
  4、支持管理:
  15. CM:配置管理。
  16. PPQA:过程和产品质量保证。
  17. MA:测量与分析。
  18. DAR:决策分析与解决。
  CMMI 4级除第二、3级所涵盖的18个过程域外,增长如下两个过程域:
  19. OPP :组织过程性能。
  20. QPM:量化的项目管理 。
CMMI 5级包含第2级到第4级的20个过程域外,
增长如下两个过程域:
  21. OID:组织创新与推展。
  22. CAR:因果分析与解决方案。
CMMI模型表述阶段式:
  一、阶段式表述提供系统化与结构化的方式,一次一个阶段达到以模型为基础的过程改进。达成每个阶段可确保有足够的过程基础建设,可做为下一个阶段过程改进的基础。
  二、连续式:连续式表述可提供最大的弹性。一个组织能够选择改进单一过程相关的问题点的绩效,或是可使用多个领域以密切配合组织的经营目标。
 
极限编程(ExtremeProgramming,简称XP)是由KentBeck在1996年提出的。KentBeck在九十年代初期与WardCunningham共事时,就一直共同探索着新的软件开发方法,但愿能使软件开发更加简单而有效。Kent仔细地观察和分析了各类简化软件开发的前提条件、可能性以及面临的困难。1996年三月,Kent终于在为DaimlerChrysler所作的一个项目中引入了新的软件开发观念——XP。适用于小团队开发。

 极限编程中有四个核心价值是咱们在开发中必须注意的:沟通(Communication)、简单(Simplicity)、反馈(Feedback)、勇气(Courage)、此外还扩展了第五个价值观:谦逊(Modesty)。 

 

方法

基于敏捷的核心思想和价值目标,XP要求项目团队遵循13个核心实践
团队协做(Whole Team)
规划策略(The Planning Game);
结对编程(Pair programming)
测试驱动开发(Testing-Driven Development)
重构(Refactoring)
简单设计(Simple Design)
代码集体全部权(Collective Code Ownership)
持续集成(Continuous Integration)
客户测试(Customer Tests)
小型发布(Small Release)
每周40小时工做制(40-hour Week)
编码规范(Code Standards)
系统隐喻(System Metaphor)
 

极限编程的4个商业实践:

  • 测试驱动开发—TDD是你的商业安全网。由于测试是在编码以前完成的,因此写完的测试必定会运行失败,接下来再写代码使测试能够经过。TDD保证你的产品功能,无论公司和技术团队实现的是大规模的变动仍是小规模的变动。
  • 结对编程—让2名开发人员写同一段代码,使用同一个键盘和同一台显示器。由于结对大大下降了浪费的时间和缺陷,因此能带来更高质量的代码,并带来高水平的协做。
  • 集体代码全部制和持续集成—若是每段代码不仅有一我的熟悉,那么就不会有什么交流瓶颈了。把代码持续集成到一个主干能够避免重复和不匹配的代码。
  • 重构—在当时的状况下,写的代码是解决已知问题的。一般,团队巧妙地解决了他们的问题,而后持续重构和修改代码,确保代码库能以最为高效的方式不断知足业务最新的须要
  •  

 
 
 

RUP是一套管理方法,用于项目从需求到发布的管理而敏捷则是一种思想,一种价值观:价值迭代交付,以人为本有一些基于敏捷思想的实践好比Scrum、XP等也都是管理方法或开发方法层面的内容RUP能够与敏捷的思想结合,能够在敏捷思想指导下进行管理,那就是敏捷的RUP

XP 与CMM 、RUP 的比较
CMM 告诉组织为了系统化地创建、实施和改进软件开发过程应该作些什么,但没有说明如何去作以及采用哪些具体的技术、策略和方法。CMM 是一套通用的过程实践标准,适用面很广。实施CMM 要求组织在过程的制度化建设上付出大量努力,一般被认为是重载(heavy-weight)的模型。
XP 是一个针对某种特定环境(需求变化快的小型团队)的具体过程实施模型和方法论。它实际上是一种演进式的原型化方法(evolutionary prototyping)[MCNL96],具备沟通高效、设计简单、反馈迅速等特色,于是是一种轻载(light-weight)、敏捷(agile) 的过程方法。
Mark Paulk 在他的文章中把XP 的实践方法与CMM 的KPA(关键过程域)进行了对照。得出的结论是,XP部分知足或大部分知足了CMM 2-3 级KPA 的要求,而基本上没有涉及CMM 4-5 级的KPA。这说明XP 的作法基本符合了CMM 的目标和KPA,但还不完备。整体上看,XP 侧重于具体的过程和开发技术,而CMM 更关注组织和管理上的问题。XP 缺乏的一个重要内容是“制度化(institutionalization)”,它不含有被CMM 认为是使良好的工程和管理实践制度化的关键基础设施和管理要件。[PALK01]
RUP(Rational Unified Process)是一个风险驱动的基于UML 和构件式架构的迭代递增型开发过程(框架)。RUP 定义了4 个阶段(起始、细化、构造、移交)和9 个科目(业务建模、需求、分析和设计、实现、测试、部署、配置和变动管理、项目管理、环境)。这些阶段对应着关键里程碑的划分,而不一样科目的工做流和活动 在生命周期的迭代中能够并发进行,具体执行的程度则能够调节。RUP 对于角色、流程、工件和活动的要求是灵活的、可配置的,因此它普遍地适用于各类类型和规模的项目。RUP 集中体现了6 个软件开发的最佳实践方法:迭代式开发、需求管理、构件式架构、基于UML 的可视化建模、持续校验质量、变动管理。RUP 是一种以架构为中心的开发过程,而这正是大、中型项目成功的关键。
XP 的编码和设计活动融为一体,弱化了架构的概念,这是它与强调架构设计的RUP 的最大不一样。架构的内涵要远大于一些简单的隐喻,它要考虑结构、行为、环境、使用、功能、性能、可靠性、弹性、重用、可理解性、约束和权衡乃至美学等诸多 方面的因素。设计架构的目的不是为了完美地表示系统的所有细节,而是为了消除最主要和最关键的架构风险。RUP 细化阶段的主要目的就是构造出一个可运行的架构原型,做为未来添加需求功能的稳固基础。另外,XP 没有包含业务建模、部署等概念,反映了它以编程为中心、节省一切的哲学。
固然二者也有很多共同点。例如,它们的基础都是面向对象方法(取代传统的结构化方法),都重视代码、文档的最小化和设计的简化,采用动态适应变化的演进式迭代周期(取代传统的瀑布型生命周期)、需求和测试驱动并鼓励用户积极参与等等。
由 于RUP 提供了很是丰富的内容,因此经常被误解为一个重载的过程。经过定制RUP 这个通用的过程框架,去掉项目没必要要的工件(artifacts)和中间环节,把XP 的作法(好比短小的迭代周期、结对编程、测试优先的设计和重构)吸取进来,也能够实现RUP 过程的敏捷和轻量化[SMTH01]。“Bob 大叔”(Robert Martin)甚至从RUP中裁剪出了一个酷似XP 的最小化RUP 过程——dx[MART01]。我设想,XP、RUP 乃至其余工程和管理方法能够统一块儿来使用,姑且成之为统一软件过程(Unified Software Process,USP)。例如,一个大项目团队在起始和细化阶段采用RUP 方法完成需求分析和架构设计,在构造和移交阶段采用XP 的作法来实现部分子系统或模块。
“轻载”、“敏捷”是美丽的词汇,无人会拒之于门外。我想XP、RUP 的目标是一致的——提升团队效率、开发出高质量的软件,而区别就在于各自的侧重点不一样,从而致使二者的适用状况和应用范围有差别。然而,它们是能够互补 的,不管是以架构为中心,仍是以代码为中心,灵活运用的关键就在于掌握其中的最佳实践方法,实施RUP、XP 或者融合了二者的过程(好比USP)都将有助于组织更好地实现CMM 目标。

 

项目

CMM/CMMI

RUP

MSF

XP

周期

螺旋模型。

演进式迭代周期,过程框架

瀑布模型和螺旋模型的结合

演进式迭代周期。软件开发方法学

核心

过程改进

架构、迭代

里程碑、迭代

以代码为中心。

范围

需求严格而极少变化的项目。

适合不一样类型的项目

适合不一样类型的项目

进度紧、需求不稳定的小项目、小型发布和小团队

组织

我的(PSP)、团队(TSP)和组织的3个层次,组间协做、培训

跨团队协做

强调产品的愿景,6种基本角色

以团队为基础,小团队、团队成员能力至关

技术

传统结构化方法

面向对象技术

综合技术

面向对象技术

管理

侧重于过程的定义、度量和改进。一切用数字和文档说话。

从组织角度出发,侧重于过程建模、部署。

业务建模、部署、过程管理等概念。

侧重于具体的过程执行和开发技术,计划设计。

活动

经过过程域来定义活动

整个团队在整个过程当中关注质量

项目管理、风险管理和就绪管理

以人为本,如每周40小时工做制、结对编程

实践

各种级别的关键实践。

重视关键基础设施。

知足了CMM 2-3 级KPA 的要求,而基本上没有涉及CMM 4-5 级的KPA

代码复审、版本管理方法、文档管理、人员招聘、重测试和重风险管理等。

编码和设计活动融为一体,弱化了架构。

用例、单元测试、迭代开发和分层的架构。

其它

通用性强,但复杂、高成本。

 

强调风险驱动,以保障可用产品的持续性交付为前提,尽可能减小没必要要的过程工件,使度量、文档最小化以得到弹性和应变能力。

提供了一系列指南,用于规划企业的基础技术设施,流程化商业的运做过程,并鼓励重用性。

拥抱变化,强调人性化、简单、沟通。尽可能减小文档。

个体和交互赛过过程和工具。

相关文章
相关标签/搜索