加入收藏 | 设为首页 | 会员中心 | 我要投稿 桂林站长网 (https://www.0773zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 云计算 > 正文

应用程序扩展性不好?来瞧基于Java开发的云应用程序

发布时间:2022-06-01 12:12:10 所属栏目:云计算 来源:互联网
导读:最近,我们受命开发一个用于分析大数据的软件即服务(SaaS)应用程序。为了进行数据挖掘,系统需要将数十亿个公开帖子存储在数据库中,并且对这些帖子进行分类处理。 这个环境下的分类是一个缓慢、耗费资源、又让人痛苦的过程,需要为数据库中的任何记录赋予

 
如何开发云应用程序?
 
为了开发云应用程序,我们就要想方设法,运用上述的想法来开发应用程序。下面是我建议采取的方法。
 
基础设施
 
如果你开始考虑开发云应用程序,基础设施是需要关注的头一个问题。如果你的平台不支持特定的资源(动态提升现有服务器的硬件规格或启用新实例),想开发应用程序就很困难。
 
眼下,我们之所以选择AWS是因为它是市面上最成熟的平台。一年前,由于AWS具有的一些重大好处,我们从内部托管模式转为AWS托管模式。
 
多个位置:我们的客户来自五大洲;使用亚马逊区域(Amazon Region),我们就能让部署的实例更靠近客户位置;这样一来,可以缩短响应时间。
监控和自动扩展:亚马逊为其平台提供了一种相当有效的监控服务。面对服务器负载,可以实现自动扩展。
内容分发网络:亚马逊CloudFront为我们提供了这一选项,即将静态内容从主部署环境卸载过来,这将缩短页面装入时间。类似平常的实例,静态内容从最近的实例提供给客户。
同步与分布式缓存:这些年来,MemCache一直是我们青睐的缓存解决方案。不过,一大问题是缺少对节点之间同步的支持。亚马逊弹性缓存(Amazon Elastic Cache)为我们提供了使用MemCache的选择,而不必担心节点同步问题。
管理型API:这是一大优点。最近,我们开始充分使用管理型API,以便短时间启用实例,从而运行集成测试。
数据库
 
假设你已选择了用来开发云应用程序的平台,下一步应该是为你的系统选择合适的数据库。你需要做出的第一个决策就是哪个适合你的系统,是SQL还是NoSQL?如果系统不是数据密集型,SQL应该可以;如果系统是数据密集型,那么你应该考虑NoSQL。
 
有时候,多个数据库可以一起使用。比如说,如果我们想实施Facebook之类的社交网络应用程序,就可以将系统设置、或者甚至用户配置文件存储在SQL数据库中。相比之下,由于数据量庞大,用户帖子必须存储在NoSQL数据库中。此外,我们可以选择具有强大搜索功能的SOLR来存储公共帖子,并选择Mongo DB用来存储用户活动。
 
可能的话,务必选择支持集群、数据隔离和负载均衡等功能的数据库系统。要不然,你可能到头来得自行实施所有这些功能特性。比如说,相比Lucene,SOLR应该是更合适的选择,除非我们想自己进行数据隔离。
 
计算密集型还是数据密集型
 
要是我们知道系统是数据密集型还是计算密集型,就比较好。比如说,Facebook等社交网络几乎完全是数据密集型,而我们的大数据分析既是数据密集型又是计算密集型。
 
就数据密集型系统而言,我们可以让云中的任何一个节点检索数据、同时处理数据。如果是计算密集型节点,最好还是将数据检索和数据处理分开来。
 
数据密集型系统通常处理实时数据,而计算密集型系统运行后台任务来处理数据。将这两种繁重任务结合在同一个环境中可能最后会降低系统效果。
 
就计算云而言,最好是有一个框架来监控负载、分发任务以及计算完毕后收集结果。如果你不需要处理是实时的,Hadoop是市面上的最佳选择。如果需要实时计算,那么可以考虑Apache Storm。
 
云应用程序的设计模式
 
想开发一个成功的云应用程序,我们应该牢记以下几个方面。
 
1. 无状态
 
让你的所有服务和服务器都是无状态,这点必不可少。如果服务需要用户数据,就把它们作为参数添加到API中。
 
值得注意的是,想在Web服务器上实施无状态会话(Stateless Session),我们有几个选择可以考虑:
 
基于Cookie的会话
分布式缓存会话
数据库会话
上述解决方案从上往下排列,可扩展性较差,但可管理性较强。
 
2. 幂等性
 
就云应用程序而言,大多数API调用会通过网络而进行,而不是通过内部方法调用而进行。因此,如果我们能确保方法调用安全,比较好。如果你坚持使用上述的无状态原则,那么你实施的服务已经具有幂等性。
 
3. 远程外观
 
远程外观有别于外观模式。它们实际上看起来似乎一样,但旨在解决不同的问题。由于你的大多数API调用是通过网络进行的,网络延迟会对响应时间大有影响。借助远程外观模式,开发人员应该可以构建粗粒度API,那样就可以减少调用数量。
 
通俗地说,跑一趟超市,一次性购买10件商品比跑20趟超市、每趟购买1件商品来得明智。
 
4. 数据访问对象
 
你在传输数据时,要注意所传输的数据量。最好只传输所需的最少数据。
 
5. 稳扎稳打
 
这不是设计模式,但你会在将来庆幸稳扎稳打。由于分布式计算的特性,一旦哪里出了问题,就很难查明具体是哪个部分出了岔子。可能的话,为系统中的每个部分实施运行状况检查、ping检测、全面日志、调试模式等安全机制。
 
结束语
 
我希望开发云应用程序的这个方法能为大家带来一点帮助。要是你有其他什么观点或经验,欢迎留言交流。

(编辑:桂林站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!