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

《架构师》期刊摘要(2014年)

 
阅读更多

1、WikiPedia上说“DevOps是软件开发、运维和质量保证三个部门之间的沟通、协作和集成所采用的流程、方法和体系的一个集合。它是人们为了及时生产软件产品或服务,以满足某个业务目标,对开发和运维之间相互依存关系的一种新的理解。”这恰好体现了精益管理中的客户价值原则,即:客户的关键来确定企业从设计到生产交付的全部过程,实现客户需求的最大满足。我们也可以把DevOps看作是一种能力,在缺乏这种能力的组织中,开发和运维之间存在着信息“鸿沟”。

    如何获取这种能力呢?关键有两点:一是全局观,要从软件交付的全局出发,加强各角色之间的合作;二是自动化,人机交互界面的强大管理工具,比如各种受版本控制的script,以及类似于Nagios这样的基础设施监控工具,类似于Puppet、Chef这样的基础设计配置管理工具。

--《DevOps:不是传说》,作者:乔梁(2014年一月

2、

    一张白纸上有一个墨点。

    观察者在纸外,目光被墨点所吸引;从业者生活在纸上,大部分世界仍然是白色的。

    我们对一项新技术或者新产品的真实被接受程度总会产生偏高的误判,而对老技术和老产品的被接受程度则产生偏低的误判。

    最后,之说以说“贴近正确”,是因为我不认为有绝对的正确。一个世界从不同的角度去看,总是不同的;即使尝试穷尽所有的观察角度来完整的理解一个世界,也是不可行的,因为世界总是在变化,而一个观察者在一个时间点只能完成一个角度的观察,当换一个观察角度的时候,他看到的已经不再是原来的世界。

 

    所有的观察者都存在偏见,但我们会尽力让他贴近真实。

--序言部分(2014年二月)

3、一名云开发人员就是负责这样的代码解决方案的人:解决方案是基于水平扩展的、分布式的、幂等的和异步处理,同时具有可伸缩、高度可用和弹性存储的特点。

 

4、性能无非就是两点-吞吐率(比如单位/秒)和响应时间(有时也成为等待时间)。最重要的是给出量化的指标,而不能只是说它应该“很快”。

    对于交易系统来说,实施系统更倾向于另外一种含义,那就是系统必须拥有高吞吐率并且尽快响应每个事件,这可以理解为“低延迟”。

    JAVA最大的弱点就是缺少对内存曾的控制。在主流处理器中一次缓存未命中就会丢失500条已经执行过的指令。为了避免缓存不能命中,我们需要控制内存曾,以一种可预测的方式访问内存。为了达到这种程度的控制,并减轻垃圾回收的压力,我们通常要用DirectByteBuffers去创建数据结构,或者放弃堆而使用Unsafe。这就可以做到精确的数据结构规划。如果Java引入对结构体数组的支持,就不必要再这儿做了。这并不需要切换语言,只是引入一些新的特性。

 

    对于低延迟应用来说,锁竞争可能是最大的一个性能障碍了。锁本身并没有性能开销,在无竞争情况下Java的同步锁也可以执行的非常好。然而,有竞争时锁的性能就会一落千丈,不仅仅因为一个线程持有锁使其他线程拿不到同一个锁,还因为更多的线程访问这个锁时会给JVM带来昂贵的锁管理成本,这个道理很容易理解。很明显,关键是要避免锁竞争,所以不要同步那些不需要同步的东西(比如,移除那些什么都不需保护的锁、缩小锁的范围、降低锁持有的时间、不要混淆锁的职能等等)。另一种常用的技术是消除多线程访问,不要让多个线程去访问一个共享的数据结构;你可以把更新操作当成命令排成队列,这样就变成单线程处理。这样就把锁竞争简单的归结成了添加在队列中的一个项目了,而它可以通过锁无关技术(无锁并发)来实现自我的管理。

--《虚拟研讨会:在低延迟环境中使用JAVA》(2014年8月)

 

5、高性能的三个主题:

    1)传输:用什么样的通道将数据发送给对方,BIO、NIO或者AIO,IO模型在很大程度上决定了框架的性能。

    2)协议:采用什么样的通信协议,HTTP或者内部私有协议。协议的选择不同,性能模型也不同。相比于公有协议,内部私有协议的性能通常可以被设计的更优。(补充:比如Protobuf比JAVA内部的序列化更加高效)

    3)线程:数据包如何读取?读取之后的编码在哪个线程进行,编码后的消息如何派发,Reactor线程模型的不同,对性能的影响也非常大。

 

    IO多路复用技术通过把多个IO的阻塞复用到同一个select的阻塞上(NIO + Selector),从而使得系统在单线程的情况下可以同时处理多个客户端请求。与传统的多线程、多进程模型比,IO多路复用的最大优势是系统开销小,系统不需要创建新的额外的进程或者线程,也不需要维护这些进程和线程的运行,降低了系统的维护工作量,节省了系统资源。

    1)异步处理模型:NIO、多个Selector,Reactor线程模型。

    2)零拷贝:Netty接收和发送ByteBuffer采用Direct Buffers,即使用堆外内存进行Socket读写,不需要进行字节缓冲区的二次Copy;如果使用传统的堆内存(Heap buffer),JVM会将堆内存Buffer拷贝一份到直接内存中,然后才进行Socket写入(Netty提供了DirectBuffer和HeapBuffer两种Buffer机制)。Netty还可以将多个Buffer对象进行组合操作,用户可以操作多个Buffers像操作一个buffer一样(scatter/gather),避免了传统通过内存拷贝的方式将几个小buffer合并成一个大buffer。此外,Netty的文件传输采用的transferTo方法,它可以直接将文件缓冲区的数据发送到目标Channel,避免了传统通过循环write方式导致内存拷贝的问题(sentfile)。

 

    3)内存池(PooledBuffer):heap buffer的创建于回收相对简单,但是对direct buffer的分配和回收,是一件耗时的操作(OS调用)。为了尽量重用缓冲区,Netty提供了基于内存池的缓冲区重用机制。测试结果显示,PooledBuffer机制比普通的Buffer(非重用)相比,性能提升了20余倍。

 

    Java的优雅退出通常通过注册JDK的shutdownHook来实现,当系统接收到到退出指令后,首先标记系统处于退出状态,不再接受新的消息,然后将挤压的消息处理完,然后调用资源回收接口将资源销毁,最后各线程退出执行。Netty的Reactor线程(组)提供了优雅退出的方式,在EventExecutorGroup中shutdownGracefully()方法。(子类包括我们常用的NioEventLoopGroup)。

 

    Netty提供了流量整形的特性(tranffic shaping),即对流量的速速率进行限定的操作,对于超过阈值的流量暂且缓存起来,当面对高流量输入业务时,最终确保流量以相对安全的速度传递给接收端;在本质上与流量控制(Flow Control)有较大的相似之处,区别就是流量控制通常采用“漏桶模型”,对超过阈值的流量直接拒绝或者抛弃,而流量整形只是暂缓发送。基本原理:对每次读取到的ByteBuffer可写字节数进行计算,获取当前的报文流量,然后与流量整形阈值对比。如果已经达到或者超过阈值,则计算等待时间delay,将当前的ByteBuffer放到定时任务Task中缓存,由定时任务线程池在延迟delay之后继续处理该byteBuff。(参见ChannelTrafficShapingHanlder)

--《专题:Netty之道》(李林锋)

6、

    1、使用线程池的意义:

    1)复用:类似于WEB服务器等系统,长期来看内部需要使用大量的线程池处理请求,而单次请求乡音时间通常比较短,此时JAVA基于操作系统的本地调用方式大量的创建和销毁线程本身就会成为系统的一个性能瓶颈和资源浪费。若使用线程池技术可以实现工作线程的复用,即一个工作线程创建和销毁的生命周期期间可以执行处理多个任务,从而总体上降低线程创建和销毁的频率和时间,提升系统的性能。

    2)流控:服务器资源有限,超过服务器性能的过高并发设置反而成为系统的负担,造成CPU大量消耗于上下文切换、内存溢出等后果。通过线程池技术可以控制系统最大并发数和最大任务处理量,从而很好的实现流控,保证系统不至于崩溃。

    3)功能:JDK的线程池实现非常灵活,并提供了很多功能,一些场景基于功能的角度会选择线程池。

 

    2、线程池技术要点:

    1)工作者线程worker:通常称为worker线程,即可以重用并执行多个任务的线程,一个worker线程的生命周期内会不停的处理多个业务job。线程池“复用”的本质就是使用一个worker线程去处理多个job,“流控”的本质就是通过对worker数量的控制实现并发数的控制。

    2)待处理工作job的存储队列:工作者线程workers的数量是有限的,同一时间最多只能处理workers线程数量的任务。对于来不及处理的的job需要保存在等到队列中(pending queue),此后空闲的worker线程即可不停的从job等待队列中获取任务并执行。基于线程池队列的不同实现,可以扩展出多种功能的线程池,比如FIFO、基于权重排序的、有界队列等等。

    3)线程池初始化:即线程池参数的设定和多个workers的初始化,通常在初始化线程池时就需要指定workers线程的个数。

    4)处理业务job算法:...

    5)workers的增加算法:业务线程数部署持久不变的,有高低峰期。线程池要有自己的算法根据业务请求的频率高低调节自身工作者workers的数量来调节线程池的大小,从而实现业务高峰期增加工作者数量提高响应速度,而业务低峰期减少工作数量节约服务器资源。增减算法通常根据“待处理工作job数”、“线程池定义的max、min工作线程数”、“worker空闲时间”等。

    6)线程池终止逻辑:线程池被终止时,需要有一定的保障策略,gracefully,这些策略需要确保worker线程平滑退出、job队列是否被清除等。

--《几种线程池的实现算法分析》(2014年8月)

 

 

分享到:
评论
1 楼 DEMONU 2016-11-02  

相关推荐

    infoq 架构师 2014年月刊收集

    《infoQ架构师2014年月刊收集》是一份涵盖了全年信息技术领域的深度分析与实践分享的资源集合。这份压缩包文件包含了2014年全年infoQ平台发布的架构师专题文章,旨在为IT从业者,尤其是架构师们提供丰富的学习材料和...

    天翼云认证解决方案架构师

    天翼云认证解决方案架构师题库知识点,帮你直接通过天翼云解决方案架构师认证考试。天翼云认证解决方案架构师题库知识点,帮你直接通过天翼云解决方案架构师认证考试。天翼云认证解决方案架构师题库知识点,帮你直接...

    软件架构师考试历年真题2014-17年

    《软件架构师考试历年真题2014-17年》是一份极其珍贵的学习资料,它集结了从2014年至2017年间软件架构师考试的所有实际题目,为备考者提供了全面了解考试内容、题型及难度的重要途径。这份资料包括了上午和下午两...

    测试架构师修炼之道:从测试工程师到测试架构师1

    【测试架构师修炼之道:从测试工程师到测试架构师1】这本书主要探讨了软件测试工程师如何进行职业规划,以及如何成长为一名优秀的测试架构师。书中通过两个面试故事引入了核心议题,即测试的核心并不仅限于业务知识...

    架构师的自我修养pdf

    在当今IT行业,架构师的作用越来越被人们所认识和重视。架构师的职责不仅在于技术层面的领导,还涵盖了从系统设计到维护的全过程。一个优秀的架构师不仅要精通技术,还需要具备良好的沟通能力、管理能力和对业务的...

    2014年下半年 系统架构设计师 试题及答案详解.rar

    《系统架构设计师试题及答案详解》是一份针对2014年下半年系统架构设计师考试的珍贵资料,涵盖了综合知识、案例分析以及论文等重要考试部分。这份压缩包文件旨在帮助考生全面理解和掌握系统架构设计的核心知识,提升...

    系统架构师学习笔记

    系统架构师的学习笔记,通常是资深架构师或者对架构有深入研究的专业人士根据个人经验和学习总结所撰写的学习资料,它可以帮助开发工程师向系统架构师的职业发展道路上迈进。 从提供的内容来看,系统架构师的学习...

    软件架构师教程,系统架构师讲义

    《软件架构师教程》是一本全面且深入的指南,旨在帮助读者掌握软件架构设计的核心概念、原则和实践。作为系统架构师考试的重要参考资料,这本书涵盖了高级软件架构师所需的知识点,同时也是系统分析师提升专业能力的...

    软考架构师2009-2022年真题附答案

    【软考架构师2009-2022年真题附答案】是一份集中的资源,涵盖了从2009年至2022年间的软件设计师资格考试(架构师级别)的实际试题及对应的答案。这个压缩包是备考者宝贵的复习资料,尤其对于那些希望在软件架构领域...

    2014系统架构师历年真题与解析.pdf

    2014系统架构师历年真题与解析.pdf

    做架构师——架构师能力模型解析.pdf

    "架构师能力模型解析" 架构师是一个职业名称,而不是一个技术高下的职位名称。要想成为一个优秀的架构师,需要具备“个人特性”和“技术技能”两个方面的能力。“个人特性”包括人际关系的能力和业务能力,而“技术...

    【精心整理】系统架构设计师软考资料.zip

    2010年下半年系统架构设计师上午试题分析与解答 2009年下半年系统架构设计师上午试题分析与解答 2009年下半年系统架构设计师上午题 2009年下半年系统架构设计师下午试题I分析与解答 2009年下半年系统架构设计师下午...

    系统架构师教程.pdf

    系统架构师需要掌握一系列的技术和理论知识,这些内容在“系统架构师教程.pdf”中得到了系统的介绍和阐述。 首先,系统架构师需具备扎实的计算机网络基础。计算机网络是现代信息系统不可或缺的组成部分,架构师应...

    一线架构师实践指南 电子书

    《一线架构师实践指南》是一本专为有志于或已经在IT行业中担任架构师角色的专业人士准备的电子书籍。该书旨在提供实用的、一线的架构设计与实施经验,帮助读者提升自己的专业技能,理解并解决实际工作中遇到的挑战。...

    历年高级系统架构师真题

    历年高级系统架构师真题是备考这一专业资格考试的重要参考资料,涵盖了从2009年至2017年的历年试题,旨在帮助考生全面理解并掌握系统架构设计的核心知识和技能。 在这些历年真题中,我们可以看到一系列关键知识点的...

    java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级架构师教程

    java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级架构师教程,java 高级...

    架构师第四阶段 架构师之路 百度网盘

    架构师第四阶段 架构师之路 百度网盘 需要的拿去......

    2021年11月最新通过系统架构师软考备考资料荟萃.rar

    《2021年系统架构师软考备考指南:理论与实践详解》 在信息技术领域,系统架构师的角色至关重要,他们负责设计并指导实施复杂的软件系统。2021年11月的软考高级系统架构师考试是检验专业技能和知识深度的重要途径。...

Global site tag (gtag.js) - Google Analytics