使用Java构建高伸缩性组件

随着多核处理器成为主流,应用开发人员对于如何编写高伸缩性的应用以利用底层硬 件的优势这个问题面临巨大的压力。此外,遗留系统不得不移植到新的架构上。保证应用 伸缩性的一种有效方式是使用高伸缩性组件构建应用。举例来说,在各种应用中, java.util.concurrent.ConcurrentHashMap可以替代同步的HashTable,使应用伸缩性更 好。因此,向应用直接提供一套高伸缩性构造块以引入并行是非常有用的。

我们创建了一套高伸缩性并发Java组件作为Amin库项目的一部分。在本文中,我们将 介绍一些创建该开源库的想法。

概述

作为软件工程师,我们不得不并行我们的应用使它们在多核机器上很好的伸缩。一种 并行方式是把它们分成若干子任务,其中每一个子任务与应用的其他子任务通信和同步。 这通常被称为基于任务的并发。我们可以基于子任务的通信模式将应用分类。

尴尬式并行——应用的子任务从不或者很少与其他子任务通信。通常情况下,每一个 任务只处理自己的私有数据。一些例子包括:

蒙特卡洛模拟程序

快速排序程序,使用fork/join模式很容易实现并发。当我们处理尴尬式并行应用时容 易得到很好的伸缩性。

粗粒度和细粒度式并行——这些应用的子任务需要互相通信。根据子任务之间的通信 频率可以把程序分为粗粒度和细粒度并行。一个例子是生产者/消费者问题。生产者产生 驱动消费者的数据。从生产者到消费者的数据发送需要通信。相比尴尬式并行应用,处理 子任务频繁交互的应用较难得到良好的伸缩性。

经过为伸缩性而优化的组件非常有益于解决这些困难问题。举例来说,如果存在一个 高伸缩性队列组件,那么实现生产者/消费者伸缩性相对容易些。本文中,我们提供了若 干通用技术提高软件组件的伸缩性。

针对伸缩性的分析

应用分析是开发过程的重要方面。分析是为了了解应用的运行特征。分析数据经常被 用于提高应用的性能和伸缩性。大多数分析器遵从一个简单的执行模式,其中有一个配置 阶段。在该阶段,根据信息获取的类型,会配置不同层次的计算堆栈。硬件计数器可以被 用来监控硬件事件。操作系统可以通过配置各种操作系统事件来监控。如果在计算层次中 还有虚拟机,那么需要配置以访问虚拟机的事件。最后,应用需要配置以得到真实应用的 事件。优秀的分析器能够在不要求应用重新编译的情况下完成这些配置。大多数分析器通 常都配置虚拟机和应用层。应用在配置之后运行时,会生成跟踪信息,例如函数运行时间 、资源使用情况、硬件性能参数、锁使用、系统时间、用户时间等等。不同的分析器会在 把跟踪信息输出到文件系统前做一些计算。最后,分析器会通过显示界面可视化这些数据 。

用于并发应用的分析器需要提供有关线程、锁竞争和同步点的详细信息。我们使用了 下面一些分析器作为Amino性能分析:

Java锁监控器(Java Lock Monitor)——Java开发人员使用该工具分析应用中锁的使 用情况。在运行时,监控组件收集各种锁数据用于发现锁竞争。该工具能够通过表格展示 详细的锁和竞争信息。IBM Java Lock Analyzer (JLA)是另一个提供锁信息的工具。它与 JLA类似,只不是通过图形界面显示缩合竞争数据。两个工具都支持x86和Power平台。

THOR ——该工具用于详细分析Java应用的性能。它能够深入分析完整的执行栈,从硬 件到应用层。信息来自于栈的四个层面——硬件、操作系统、JVM和应用。用户可以看到 锁竞争的信息以及对应的代码、瓶颈、多核之间的线程迁移和竞争导致的性能下降。该工 具支持x86和Power平台。

AIX性能工具——IBM的AIX操作系统自带一套底层的性能分析和调试工具。其中包括:

Simple Performance Lock Analysis Tool (SPLAT) ——该工具是AIX系统上的一个锁 分析工具,可以通过命令行运行,用于分析各种内核级的锁。同时,它也可以分析和显示 用户级锁(读/写和mutex)的竞争。应用必须启用跟踪选项,SPLAT需要用到这些跟踪数 据。

XProfiler——该分析工具基于X—Windows,用于C语言应用的函数级分析,能够显示 在用户代码中计算敏感的函数。如果要使用XProfiler,代码需要使用特殊的标志(-pg选 项)编译。

prof、 tprof和gprofncbr——各种prof命令都可以用于分析用户应用。prof命令能够 得到所有应用中的外部符号和函数。gprof是 prof的超集,可以获得应用的调用关系图。 最后,tprof用于得到应用的宏观和微观的分析信息。tprof能够得到各个指令、子程序、 线程、进程的计时数据,还有用户模式函数、库函数、Java类、Java方法、内核函数、内 核扩展等的处理器使用情况。

时间: 2024-09-18 22:35:02

使用Java构建高伸缩性组件的相关文章

一个社交App是如何构建高伸缩性的交互式系统

一个社交App需实现的功能 用户关注的常规社交功能.活动.地理位置.探索功能.新鲜事.视频照片分享等等,需要提供的功能不胜枚举,所以从技术角度来说,开发者需要解决的问题也是异常复杂的. 当一款社交App发布之初,用户访问量比较小,使用一台服务器就能够支撑全部的访问压力和数据存储需求,但是互联网应用具有病毒式的传播特点.一款App很可能会面临一夜爆红的现象,访问量和数据量在短时间内呈现爆发式增长,这时候会面临的局面是每天上亿PV.数百万新增用户和活跃用户.流量飙升至每秒数百兆.这些对于一个只部署了

Consul实践之Consul结合nginx构建高可用可扩展的Web服务

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1730439 前文<Consul实践之Consul是什么>讲述了consul是什么,这篇文档是一个Consul实际应用的一个例子,用Consul结合nginx构建高可用可扩展的Web服务.Consul还能做许多其他的事情,可以根据实际需要构思和使用. 方案概述 nginx提供的负载均衡服务同样支持高可用.可扩展的W

《构建高可用VMware vSphere 5.X虚拟化架构》——导读

前言 虚拟化技术近几年时间得到迅速发展,使用各种虚拟化架构打造企业应用平台越来越多. 作者从2006年开始使用VMware虚拟化架构打造企业应用平台,在多个项目实施过程中,传统高可用企业应用平台需要昂贵的硬件和软件才能实现,而使用虚拟化架构可以轻松实现. 目前市场上关于虚拟化的书籍一般以入门为主,介绍如何使用虚拟化平台,包括作者的<VMware vSphere 5.0虚拟化架构实战指南>一书.市场上没有关于如何使用虚拟化架构打造高可用企业应用平台的书籍,更没有实施过程中问题的处理的相关图书.作

基于Nginx和Consul构建高可用及自动发现的Docker服务架构

本文讲的是基于Nginx和Consul构建高可用及自动发现的Docker服务架构[编者的话]本文对于Docker和Consul Template以及Nginx如何结合使用做了较为详细的介绍. [上海站|3天烧脑式微服务架构训练营]培训内容包括:DevOps.微服务.Spring Cloud.Eureka.Ribbon.Feign.Hystrix.Zuul.Spring Cloud Config.Spring Cloud Sleuth等. 导读 如果你在大量接触或使用微服务的话,你可能会碰到一个问

使用Java构建微服务

本文讲的是使用Java构建微服务,[编者的话]本文翻译自Dzone Guide to the Java Ecosystem,Dzone是一个关于Java的优秀网站.文中介绍了几种用Java构建微服务的方法,包括Container-less.Self-contained以及In-container.翻译经验不足,如有错误,请慷慨指出. @Container容器技术大会将于2016年1月24日在北京举行,来自爱奇艺.微博.腾讯.去哪儿网.美团云.京东.蘑菇街.惠普.暴走漫画等知名公司的技术负责人将分

java-如今Java构建分布式应用的最常用方案是什么?

问题描述 如今Java构建分布式应用的最常用方案是什么? 比如我司使用的是一个SCA(面向服务组件)的框架Fabric, 不过感觉用的人不大多. 那么通常构建分布式应用的技术方案是什么呢? PS. 由我举的栗子来看.. 指的是服务端的分布式框架 - - 解决方案 我认为构建分布式最常用的是EJB 解决方案二: 使用Apache的CXF 解决方案三: 使用Apache CXF是一种方式,推荐使用阿里巴巴的dubbo框架用于服务的管理和调度.. 解决方案四: 这个太笼统了.可以分为几个层次 1.是数

使用 Java 构建微服务

快速浏览 在Java生态中,构建微服务的策略包括Container-less,Self-contained,以及In-container等. Container-less微服务将应用及其依赖打包成一个单一的jar文件. Self-contained微服务也是打包成一个单一的Jar文件,但它还包括一个嵌入式框架,这个框架含有可选的第三方lib,当然这些lib是兼容的. In-container微服务打包成一个完整的Java EE容器,该服务在Docker镜像中实现. 基于微服务的架构给架构师和开发

如何在阿里云上构建高可用应用

业务高可用是我们每个项目的需求,一个经常故障的项目,会让我们觉得不靠谱而选择放弃,从而导致项目的失败.今天,我们来聊一聊,如何让你自己的业务能够更加稳固的运行! 本次我们从四个不同的角度,来分析,如何让我们的应用更加稳固,平稳运行. 一.        程序架构 优秀的代码 优秀的代码非常重要,即使我们拥有最好的硬件资源和架构,如果我们没有一套健壮的代码,其他资源再好都没有用,所以代码在设计和编写时,应当注意代码的健壮程度.优秀的代码不止开发起来方便,同时维护成本也较低,对于后续的优化来说,健壮

java成本高?

问题描述 公司搞php的占大部分,只有少数是搞java的,而且只是作后台数据处理的时候有到java.之前听过同事说java开发成本高,网上也有相类似的说法,我没搞明白,成本具体是指哪些?--开发难度大?--维护成本高?--系统搭建成本高?还是别的? 解决方案 首先我们看成本由哪些部分组成1.开发成本 2.服务器成本3.运维成本但是成本的高低不好说,因为和项目的规模很有关系http://www.infoq.com/cn/news/2011/07/java-taobao看一下上面的这篇文章,淘宝为什