欢迎光临
我们一直在努力
广告
广告
广告
广告
广告
广告
广告
广告
广告
广告

微服务架构中的云服务器发布管理 (微服务架构中,技术架构应用或服务在运行时)

微服务架构中的云服务器发布管理

引言

微服务架构是一种软件架构方式,将应用程序分解为一组松散耦合、自主的服务。每个服务负责一个特定功能,并可以独立部署和扩展。微服务架构的优势在于其灵活性、可扩展性和韧性。在微服务架构中,云服务器发布管理是一个关键任务。它涉及到将新版本的服务部署到生产环境。发布过程必须快速、可靠和高效,以最小化对应用程序的停机时间和影响。

发布管理挑战

云服务器发布管理在微服务架构中面临着许多挑战,包括:服务数量众多:微服务架构通常包含大量服务,这使得发布管理变得更加复杂。服务相互依赖:微服务通常相互依赖,因此部署新版本的一个服务可能會影響其他服務。频繁部署:微服务架构通常需要频繁部署新版本的服务,以修复错误、添加新功能或进行性能优化。可扩展性:发布管理系统必须能够在大量服务器上扩展,以支持大规模的微服务部署。自动化:发布过程应尽可能自动化,以减少人工错误并提高效率。

发布管理最佳实践

为了应对这些挑战,可以采用以下发布管理最佳实践:使用自动化发布工具:自动化发布工具可以简化发布过程,减少人工错误。使用持续集成和持续交付 (CI/CD) 管道:CI/CD 管道可以将构建、测试和部署过程自动化,从而加快发布速度。使用蓝绿部署:蓝绿部署是一种发布策略,涉及到在将新版本的服务部署到生产环境之前,先将其部署到一个单独的环境中。使用滚动升级:滚动升级是一种发布策略,涉及到


微服务入门|微服务架构怎么设计

将一个单体应用拆分成一组微小的服务组件,每个微小的服务组件运行在自己的进程上,组件之间通过如RESTful API这样的轻量级机制进行交互,这些服务以业务能力为核心,用自动化部署机制独立部署,另外,这些服务可以用不同的语言进行研发,用不同技术来存储数据 。

通过以上的定义描述,我们可以基本确定给出微服务的节特征:

用微服务来进行实践到生产项目中,首先要考虑一些问题。比如下图的微服务业务架构:

在上图图表展示的架构图中,我们假设将业务商户服务A、订单服务B和产品服务C分别拆分为一个微服务应用,单独进行部署。此时,我们面临很多要可能出现的问题要解决,比如:

1、客户端如何访问这些服务?

2、每个服务之间如何进行通信?

3、多个微服务,应如何实现?

4、如果服务出现异常宕机,该如何解决?

以上这些都是问题,需要一个个解决。

在单体应用开发中,所有的服务都是本地的,前端UI界面,移动端APP程序可以直接访问后端服务器程序。

现在按功能拆分成独立的服务,跑在独立的进程中。如下图所示:

此时,后台有N个服务,前台就需要记住管理N个服务,一个服务 下线 、 更新 、 升级 ,前台和移动端APP就要重新部署或者重新发包,这明显不服务我们拆分的理念。

尤其是对当下业务需求的飞速发展,业务的变更是非常频繁的。

除了访问管理出现困难以外,N个小服务的调用也是一个不小的网络开销。

另外,一般微服务在系统内部,通常是无状态的,而我们的用户在进行业务操作时,往往是跨业务模块进行操作,且需要是有状态的,在此时的这个系统架构中,也无法解决这个问题。

传统的用来解决用户登录信息和权限管理通常有一个统一的地方维护管理(OAuth),我们称之为授权管理。

基于以上列出的问题,我们采用一种叫做网关(英文为API Gateway)的技术方案来解决这些问题,网关的作用主要包括:

网关(API Gateway)可以有很多广义的实现办法,可以是一个软硬一体的盒子,也可以是一个简单的MVC框架,甚至是一个的服务端。

他们最重要的作用是为前台(通常是移动应用)提供后台服务的聚合,提供一个统一的服务出口,解除他们之间的耦合,不过API Gateway也有可能成为 单点故障 点或者性能的瓶颈。

最终,添加了网关(API Gateway)的业务架构图变更为如下所示:

所有的微服务都是独立部署,运行在自己的进程容器中,所以微服务与微服务之间的通信就是IPC(Inter Process Communication),翻译为进程间通信。

进程间通信的方案已经比较成熟了,现在最常见的有两大类: 同步调用、异步消息调用 。

同步调用

同步调用比较简单,一致性强,但是容易出调用问题,性能体验上也会差些,特别是调用层次多的时候。同步调用的有两种实现方式:分别是 REST 和 RPC

基于REST和RPC的特点,我们通常采用的原则为: 向系统外部暴露采用REST,向系统内部暴露调用采用RPC方式。

异步消息的方式在分布式系统中有特别广泛的应用,他既能减低调用服务之间的耦合,又能成为调用之间的缓冲,确保消息积压不会冲垮被调用方,同时能保证调用方的服务体验,继续干自己该干的活,不至于被后台性能拖慢。

需要付出的代价是一致性的减弱,需要接受数据 最终一致性 ,所谓的最终一致性就是只可能不会立刻同步完成,会有延时,但是最终会完成数据同步;还有就是后台服务一般要实现 幂等性 ,因为消息发送由于性能的考虑一般会有重复(保证消息的被收到且仅收到一次对性能是很大的考验)。

最后就是必须引入一个独立的 Broker,作为中间代理池。

常见的异步消息调用的框架有:Kafaka、Notify、MessageQueue。

最终,大部分的服务间的调用架构实现如下所示:

微服务架构中,一般每一个服务都是有多个拷贝,来做负载均衡。

一个服务随时可能下线,也可能应对临时访问压力增加新的服务节点。

这就出现了新的问题:

这就是服务的发现、识别与管理问题。

解决多服务之间的识别,发现的问题一般是通过注册的方式来进行。

具体来说:当服务上线时,服务提供者将自己的服务注册信息注册到某个专门的框架中,并通过心跳维持长链接,实时更新链接信息。

服务调用者通过服务管理框架进行寻址,根据特定的算法,找到对应的服务,或者将服务的注册信息缓存到本地,这样提高性能。

当服务下线时,服务管理框架会发送服务下线的通知给其他服务。

常见的服务管理框架有:Zookeeper等框架。

如上的问题解决方案有两种具体的实现,分别是: 基于客户端的服务注册与发现 、 基于服务端的服务注册与发现 。

优点是架构简单,扩展灵活,只对服务注册器依赖。

缺点是客户端要维护所有调用服务的地址,有技术难度,一般大公司都有成熟的内部框架支持。

优点是所有服务对于前台调用方透明,一般小公司在云服务上部署的应用采用的比较多。

前面提到,单体应用开发中一个很大的风险是,把所有鸡蛋放在一个篮子里,一荣俱荣,一损俱损。

而分布式最大的特性就是网络是不可靠的。

通过微服务拆分能降低这个风险,不过如果没有特别的保障,结局肯定是噩梦。

因此,当我们的系统是由一系列的服务调用链组成的时候,我们必须确保任一环节出问题都不至于影响整体链路。相应的手段有很多,比如说:

现在走云原生安全真的安全吗?

作者 | Drishti Shastri译者 | 天道酬勤 责编 | 徐威龙封图| CSDN 下载于视觉中国在当今时代,企业网络和数据安全风险从未像现在这样具有里程碑意义。

尽管如此,传统方法(包括公有云运营商使用的方法)基本上是相同的。

云原生的漏洞与威胁有哪些?安全性如何?这里有你想知道的一切云原生应用的兴起及其安全威胁云原生的漏洞与威胁有哪些?安全性如何?这里有你想知道的一切在当今时代,企业网络和数据安全风险从未像现在这样具有里程碑意义。

尽管如此,传统方法(包括公有云运营商使用的方法)基本上是相同的。

转向应对威胁攻击而不是阻止威胁的反应措施。

云原生应用程序日益受到重视,用各种可能的方式质疑了传统智慧。

从基础架构到应用程序的开发,堆栈在传统方法与更现代的基于云的方法之间形成了鲜明的对比,其中大多数已对成功的模式和实践达成了主流观点:DevOps文化、持续交付和微服务架构 。

为什么我们还没有重新构想云原生的安全性呢?我们对此大胆的新想法在哪里呢?可以肯定地说,在交付应用程序的过程中,云原生的安全性一直在被长期追踪。

传统的IT安全团队将自己视为中间人。

他们必须正确地完成工作,否则将面临代理机构所面临的更大风险。

它们在所有过程中都对安全性有很高的要求,但是要满足这些级别需要花费时间、测试和修订。

因为这会延迟应用程序的开发并且通常不能确保全面的保护,所以开发团队经常会抱怨。

当组织希望提高和加快应用程序改进生命周期并调度云原生应用程序时,安全将成为更为突出的测试。

大部分云原生应用程序都在新模型中运行,这些模型可提供非常规的生产力、适应性和成本优势。

使用dev-ops进行开发的云原生进一步将DevSecOps作为其安全组件。

DevSecOps试图将安全纳入速度、敏捷性和连续交付流程中。

但是,如果DevSecOps忽略了集成、业务流程功能和控制,并且对用户的安全性较低,则可能很难在连续交付系统中提供安全性。

云原生的漏洞与威胁有哪些?安全性如何?这里有你想知道的一切云原生的漏洞与威胁有哪些?安全性如何?这里有你想知道的一切云原生漏洞云原生肯定会发生漏洞。

我们是人类,肯定会犯错误,尤其是在苛刻的期限和产品交付之后。

尽管有全部的警告、标志和注意事项,我们也会做出一些错误的判断。

在发出警告的过程中,人们继续盲目地从Stack Exchange复制和粘贴,来掩盖在GitHub上发现的应用程序,甚至随机地将代码从一个毫无头绪的文件夹中随机拉出,并且只能怀疑地认为该作者从未遇到过或甚至没有与之交谈过的第三方。

微服务应用程序的分布式性质意味着,即使在内部编写所有代码的情况下,通过消除第三方参与者的风险,不同的组件也可能由不同的团队拥有。

团队之间的沟通障碍会导致一系列问题,包括在测试、质量保证甚至应用程序中的漏洞解决方面缺乏协调。

一个单独的云原生应用程序可以包括分散在众多基础上的数千个剩余任务。

在本地数据中心、众多公有云和边缘数据中心中可能会有奇异的微服务,最后,在组织领域中,我们目前似乎还无法发展。

每个开发人员和每个开发团队都知道并了解如何解决不同的问题。

他们所做的就是相应地培养他们的注意力和知识。

在内部代码环境中,即使所有部门都以某种方式保护自己的更广泛程序的一部分,微服务也必须与其他部门联系,并且通信在这里是风险或脆弱性。

这些所有说法听起来都令人生畏和令人恐惧,但云原生确实解决了一些非常复杂的现实问题,我们再也不能忽视它的存在。

随着我们不断升级其安全性,云原生的漏洞正在不断发展并一直存在。

云原生的漏洞与威胁有哪些?安全性如何?这里有你想知道的一切云原生的漏洞与威胁有哪些?安全性如何?这里有你想知道的一切对云原生应用程序的主要威胁尽管公司开始体验云原生应用程序的优势,但他们对处理和维护此类系统的实际方面却知之甚少。

与在云环境中相比,保护的后果是否与传统系统相比有很大不同?防护措施和保障措施如何对其产生影响?以下是基于云的环境的一些最高安全性问题:1.云配置错误IaaS和云数据存储的配置错误是当今一些最具破坏性的云违规和数据泄露的主要原因。

无论你要删除结构化的云安全设置、使用通用代码、无限制地访问某些资源还是其他任何原因,配置错误问题都会导致许多未知威胁,这些威胁仅在尴尬的遭遇后经常在报纸上看到。

最新的《 2019年云安全报告》称,大约40%的组织认为错误配置云平台是他们对网络安全的主要关注点。

2.商业化管理的IT不用担心“影子IT”或“流氓IT”。

毫不夸张地说, 几家公司将基础架构的收购趋势标记为,将获得和运营云服务的业务桥梁客户称为“商业化管理的IT”,以及创造力和发展的引擎。

《 Harvey Nash /毕马威CIO 2019调查》报告称,目前有超过三分之二的公司为企业推广或允许IT管理。

这是因为这样做的公司击败行业竞争对手的能力提高了52%,提供更好的员工服务的可能性提高了38%。

令人担忧的是,如果没有信息和网络安全专业人员的合作,这些云技术孤岛可能成为组织的巨大安全障碍。

这些公司的发展速度相当快,但调查显示,冗余的安全隐患波长的可能性是后者的两倍。

3.购买多云产品《云保护联盟报告》显示,大多数公司都依赖各种各样供应商的云环境来购买多云产品。

大约66%的公司具有多云设置,其中大约36%取决于多云和混合系统的混合。

目前,由于云实际上是希望降低其运营处理成本的所有其他企业的首选工具,因此云计算向其云消费者提供一系列服务(SaaS、PaaS、IaaS)。

云在其整个上下文中提供安全、迅速响应和服务质量。

但是,每次用户无法从一个云迁移到另一个云时,它都会保持成本和QoS可伸缩性。

为了克服这种多云计算框架,引入了基于云的系统之间的资源动态共享。

在多云设备中,安全性甚至是一个更为复杂的问题。

云原生的漏洞与威胁有哪些?安全性如何?这里有你想知道的一切4.混合架构根据著名的《云安全联盟报告》,大约55%的组织拥有复杂的、混合操作的云计算环境。

该系统为大型组织提供了一种逐步过渡到云的绝佳方法,但是当他们难以跟踪整个架构中的资产并监视众多混合云连接的活动时,它给安全性带来了挑战。

实际上,Firemon先前发布的一份报告显示,80%的组织都在挑战混合安全监控和管理工具的局限性和复杂性。

5.暗数据就像电信行业的暗光纤一样,暗数据也适用于企业和商业。

这里有大量未开发的、大多是不受监管的数据,它们只是存在而已,什么也没做。

不幸的是,尽管暗光纤明确代表了仅点亮即可增加功率和带宽的优点,即使被识别和忽略,暗数据也可能存在安全风险,无论它们在用户手中出现错误还是落在用户的范围之外。

有关暗数据的大多数争论都倾向于集中于组织的潜在价值和有用性。

实际上,对于愿意花费资本(资金、设备和时间)来创建和利用暗数据中锁定的知识和兴趣的组织,这些前景无疑是有利可图的。

这也说明了为什么许多公司尽管不打算代表他们工作,却拒绝在短期内或在计划过程中进一步交换黑暗的细节。

就像许多潜在的富有吸引力的信息资源一样,企业还必须意识到,暗数据或者关于暗数据及其客户和他们的云运营的暗数据,可能会给他们持续的健康和福祉带来风险,超出了他们的直接控制和管理范围。

根据最近的研究,有40%的组织仍处于有关容器环境的安全策略的规划或基本阶段。

6.容器与容器编排如果你使用容器在表面上开发应用程序或将现有的单源(单片)应用程序带入容器化的生态系统,则必须理解容器环境会带来奇怪的安全威胁。

从第一天开始,你就应该准备好应对这些威胁。

开始构建自己的容器,该容器将在生产行业中安装和运行。

以下是最常见的容器安全风险:特权标志:即使是那些对容器有深入了解的人也可以知道特权容器的含义。

使用特权标志的容器几乎可以执行服务器可以执行的任何操作,执行并获得对客户端资源的访问。

这意味着,如果入侵者进入一组受保护的标志箱,则它们可能会被破坏。

无限制的交互:为了实现其目标,容器必须彼此交互。

但是,容器和微服务的数量以及容器的短暂设计通常意味着,要执行符合最低权限概念的联网或防火墙法规可能会很困难。

但是,你的目标应该是使容器只能在减少攻击面所必需的容器中进行交互。

缺乏隔离:容器安全是一把双刃剑。

除了使用寿命短和功能受限外,它们的不变性质还提供了各种安全优势。

但是容器也可以用来攻击主机。

我们之前讨论过,这种危险存在于带有特权标志的容器中。

基础主机可能会受到许多其他错误配置的威胁。

云原生的漏洞与威胁有哪些?安全性如何?这里有你想知道的一切确保全面安全为了接近云原生的安全性,最好不要使用传统的手动安全技术。

此外,为了建立成功的DevSecOps,IT部门应将重点放在自动化和安全人员融入DevOps团队中。

由于其在容器基础结构中的微服务体系结构软件包,因此基于云的应用程序可以比传统应用程序更快地扩展。

以上意味着手动安全方法太慢而无法保留,并且自动化是强制性的。

将安全团队归入DevOps组可确保安全性包含在应用程序代码中,而不是一旦发现问题便进行修改。

这也可以加快并澄清对问题的响应。

让我们谈谈五个DevSecOps支柱,这些支柱在确保全面网络安全方面具有重大潜力:安全合规的部署管道:分析工具、集成管道以及如何将合规性和审核融入到DevSecOps和Cloud-Native Development的管道中。

安全且合规的云平台:身份和访问管理评估、检测控制、基础结构保护、数据保护和响应事件。

代码一致性:在软件开发过程中,合规性被视为代码框架,以确保管理、合规性和任何风险缓解问题。

机密信息管理:在混合云业务模型中管理基于云的敏感信息、密钥和证书。

容器隐私:容器如何适应安全策略,如何链接容器安全威胁以及如何审查容器操作模型和检查。

所有这些支柱都是侧重点领域,因此,始终地、完全地应用了业务安全,并且需要进一步进行审查。

为了提供每个实施支柱的跨部门愿景,对所有支柱进行横向治理。

这些治理模型适用于每个支柱,并确保支柱以互惠互利的方式运作。

受保护的交付:确保支持的应用程序平台和云基础架构稳定、合规且安全。

安全模式:开发安全位置和威胁模型以支持客户的多样化接受。

信息保护:确保内部和外部员工不受客户数据的保护。

风险评估:包括当前体系结构、容器策略和云基础架构,并对应用程序进行差距分析。

技术变更日志:创建有序的战术执行积压,通过交付工程结果来推动3-6个月的路线图和战略实施计划。

云原生的漏洞与威胁有哪些?安全性如何?这里有你想知道的一切云原生的漏洞与威胁有哪些?安全性如何?这里有你想知道的一切对新安全原型的需求统计数据显示,到2021年,将有92%的公司成为云原生公司。

话虽如此,通常使组织陷入困境的是为它构建一个5000美元的应用程序和一个5美元的安全系统。

就云安全性而言,安全性同等或是一个更重要的因素。

因此,DevSecOps的概念需要尽早实施并认真对待。

DevSecOps在应用程序开发过程的所有阶段均提供合规性,并负责设计和安装应用程序。

首先要评估团队或实体的性质,并建立代表该团队或实体的程序。

第一步是在团队之间分配孤岛,以确保每个人都对保护负责。

由于开发团队出于安全原因构建应用程序,因此Ops将更快地交付软件,并且使你高枕无忧,因为他们理解开发人员知道稳定性和保护至关重要。

实际上,必须有可以立即进行安全检查的过程。

服务器记录表明谁进行了修改、进行了哪些更改以及何时进行了更改,这些都是在审核程序时要知道的所有重要事实。

保持保护的最简单方法是始终保证系统运行最新的软件更新。

安全修复程序无需花费数月的时间,并且应该是快速而自动的。

同样,在开发API和新功能时,应进行潜在的更新,以防止软件承担责任并阻止框架打补丁以防止崩溃。

创建云原生应用程序时,仍然没有单一的安全方法来保护你的软件。

为了保护云中的服务器资源,你需要采取多方面的方法。

为了保护你的容器,你需要采取几种策略。

归根结底,要将安全放在适当的优先级列表中,你需要DevSecOps策略。

云原生的漏洞与威胁有哪些?安全性如何?这里有你想知道的一切云原生的漏洞与威胁有哪些?安全性如何?这里有你想知道的一切理想的云原生安全框架会是什么样?为了允许基于云的转换,公司需要在设计安全策略之前考虑以下进一步要求:高标准的安全自动化:常规的基于预防措施的安全操作根本无法使基于云的系统保持几乎无限的动态性。

根本不是手动工作流程的选择。

对云原生安全性的需求是自动检测和大规模灵敏性。

混沌设计:在微服务架构中,运行时组合在一起的许多软件组件可以用于任何功能。

从安全的角度来看,这意味着检测和控制的逻辑不能依赖于对操作安全性的事先了解。

云原生安全性应该包含混沌工程的原理——高效、有效地运行测试等。

快速识别,涵盖本地并立即追踪:云原生程序本质上是分配了计算应用程序。

在这样的生态系统中,随后无法轻松执行全局安全性选择。

因此,你希望确定措施的优先级,使你能够在系统范围的恶意趋势蔓延之前迅速识别,恢复并涵盖本地影响。

尽管你的安全决策并非100%准确,但是本地操作和快速恢复可以为你提供更兼容的现有系统。

随后,你的云解决方案应具有哪些原生安全性?简而言之,让我们关注编译器功能。

作者认为主要功能如下:混合堆栈可见性和决策支持在服务器、VM、数据库、软件和API服务中,即使分布了应用程序,但短期内还是动态资源和容器,仍需要云原生数据中心中的可见性和决策支持。

在这些不同层上获得的数据应该进入引擎,以便实时进行选择过程。

快速反应和警告功能可限制爆炸半径万一发生事故或袭击,安全解决方案将减轻并控制影响。

这种论点等同于迅速的决策和有见地的控制措施,可以在发生不可逆转的破坏之前阻止恶意行为。

在云原生环境中,智能检测系统可以完全识别入侵的出现并影响本地控制。

严密监控与调查由于所有分布式组件和API服务,云本机工作负载安全调查可能会很复杂,因此监视和安全调查必须最大程度地降低性能影响和存储要求。

这包括一个集中的监视体系结构,没有网络瓶颈,并且工作负载可以扩展。

与自动化工具集成容器工作负载可以在云原生环境中由Kubernetes、Openshift、Amazon ECS或Google GKE管理。

你可以(可选)使用Puppet、Ansible或Chef自动执行部署。

安全工具可以与要保护的工作负载一起自动部署,云环境必须是与此类组件的必备集成。

对于替换第一代物理服务器和虚拟机的事件驱动的容器和应用程序,安全性必须找到正确的切入点,以最大化可视性并降低风险,同时允许创造力和适应连续云交付的复杂性。

云原生的漏洞与威胁有哪些?安全性如何?这里有你想知道的一切结论从整体环境迁移到云原生环境确实听起来很吸引人,但是一旦决定这样做,请确保评估可能出现的所有安全问题,评估是否有足够的资源和团队来处理这些问题。

而且最重要的是,如果要实现这种转变,你的企业才能真正脱颖而出并发展壮大。

希望这篇文章对你有用,欢迎评论区和我们讨论。

微服务:Java EE的拯救者还是掘墓人?

引言


有人说,Java确实过于臃肿,经常“小题大做”。但PHP、扩展方面短板太明显,做小应用可以,大型应用就玩不转了。另外,JavaEE领域有太多优秀框架可以解决开发效率的问题,事实上借用Spring等框架,开发的效率丝毫不亚于PHP。

互联网时代的Java开发者,很多都不是基于Servlet和EJB来开发Web应用,而且WebLogic、WebSphere也只会存在于大公司的存量系统中,互联网公司的Java都是Tomcat的世界。

那么,微服务能完全弥补JavaEE的短板吗?对于JaveEE来说,微服务扮演的,究竟是拯救者还是掘墓人的角色?


在Java问世之初,包括IBM、BEA、Oracle在内的一些巨头公司,看到了Java作为一门杰出的Web编程语言可能给他们带来的巨大商机。那么如何通过一门编程语言来赚钱呢?答案就是,使用这门语言构建复杂无比的服务器,让那些大公司支付一大笔费用来购买这些服务器。于是紧接着就出现了JavaEE规范、JSR规范,以及WebLogic、WebSphere等服务器中间件。

在这些服务器上面部署了大型的程序包,它们运行缓慢,消耗大量的内存。

基于这些容器的开发和调试对开发人员来说简直就是噩梦,作为对他们的补偿,他们从雇主那里获得了丰厚的报酬。

因为耗资巨大,几乎找不到一家公司可以使用合理的费用长时间地支持Java。

如果你要用Java构建一个网站,你必须支付一大笔费用来运行这些服务器,哪怕你只用到了Servlet容器。

在很长一段时间里,Java被用在企业和公司里,因为只有这些大公司能够负担得起数百万美元的服务器费用,并为那些企业级开发人员支付高额的薪水。

RodJohnson在2003年发布了Spring框架,Spring提供了IoC和对POJO的支持,帮助开发人员逃脱EJB魔掌。

开发效率因此得到大幅的提升,大量开发人员转向Spring,把EJB丢在一边。

应用服务器开发商看到了这一点,他们在JavaEE5里提供了一些可以减轻开发人员负担的特性。

可惜的是,Spring被一路追捧,人们几乎把它跟JavaEE容器混为一谈,它仍然运行在JavaEE的Servlet容器里,这些容器沿用的是十年前的设计,并没有考虑到多核CPU和NIO。

在这期间,PHP奋起直追。

PHP使用更少的内存和资源,得到很多公司的支持。

一些CMS平台,比如WordPress、Drupal等都是基于PHP构建的,这些平台吸引了大批PHP开发人员。

不过,虽然PHP仍然是现今最流行的编程语言,但它也有自己的短板。

它运行速度不是很快,而且难以横向扩展。

2009年,RyanDahl启动了项目,它支持异步非阻塞的、基于事件驱动的I/O。

如果服务器的线程使用得当,可以极大地提升响应速度,单个服务器的吞吐量可以媲美一个JavaEE服务器集群。

是一个很好的作品,但它也有自己的局限性。

难以扩展,也难以与遗留的系统集成。

2014年,Undertow出现了,它是一个基于Java的非阻塞Web服务器。

从#的测试结果来看,在一个价值8000美金的戴尔服务器上,它可以每秒钟处理几百万个请求,而谷歌需要使用一个集群才能处理一百万个同样的请求。

它是轻量级的,它的核心部分只需要1M内存,它还包含了一个内嵌的服务器,这个服务器使用不到4M的堆内存。

基于UndertowCore构建的LightJavaFramework是一个微服务容器,它支持设计驱动及生成代码,并支持运行时安全和运行时验证。

JavaEE厂商

多年前,JavaEE厂商,比如Oracle和IBM,他们花费数亿美元开发应用服务器(WebLogic和WebSphere),这些服务器以数百万的价格卖给了大型组织。

但现在这些服务器卖不动了,因为JBoss迅速抢占了市场份额,Oracle对JavaEE的支持正在走下坡路:

#/story/16/07/02//oracle-may-have-stopped-funding-and-developing-java-ee

随着微服务越来越多地受到关注,这些应用服务器很难有好的销量,因为这些服务器更适合用来部署单体应用。

有一个包含了数百个EJB的应用,为了在WebLogic上测试一行代码改动,居然用了45分钟时间。

JavaEE客户


从客户角度来看,耗费巨资购买这些服务器是不值得的,因为JavaEE所承诺的未必都是真的。

一个为WebSphere开发的应用无法部署在WebLogic上,所以你需要花更多的钱去升级服务器,因为厂商可能不再支持旧版的服务器,而这样的更新会花费你数百万美元。

于是一些聪明人不禁要问,为什么我们要把应用部署在这些庞然大物上?为什么我们要把应用打包成一个ear包或war包,而不是jar包?为什么我们不能把大型的应用拆分成更小的块,让它们可以独立部署和扩展?

微服务


微服务是这些问题的解药。

Wikipedia把微服务定义为“??一种软件架构风格,复杂的应用由一些独立的进程组成,这些进程使用与语言无关的API进行交互。

这些进程服务规模很小,高度离散,聚焦在一个很小的任务上,使用模块化方式来构建系统”。

微服务架构让构建应用变得更加容易,而且应用被拆分成单独的服务,这些服务可以被任意组合。

每个服务可以被独立部署,也可以被组合成一个应用。

这些服务还可能会被其他应用依赖。

它加快了服务的开发速度,因为只要定义好接口,服务可以并行开发。

微服务具备弹性和伸缩性。

微服务不只依赖单个服务器和部署,它们可以被发布到多个机器上,或者多个数据中心及其它任何可用的区域。

如果一个服务失效,可以启动另外一个。

因为整个应用被分解成了微服务(小型服务),可以很容易地对其中某些热门的服务进行横向扩展。

如果你曾经使用过COM、DCOM、CORBA、EJB、OSGi、J2EE、SOAP和SOA等,那么你就会知道服务和组件并不是什么新生事物。

企业在使用组件方面存在的一个最大问题是他们依赖大型的硬件服务器,并在同一个服务器上运行很多应用。

我们有EJB、WAR包和EAR包,以及各种组件包,因为服务器资源太过昂贵,要尽可能地物尽其用。

不过从最近几年的发展情况来看,之前的方式有些落伍。

操作系统服务器一直在变化,虚拟资源可以被当成组件发布,比如EC2、OpenStack、Vagrant和Docker。

世界变了。

微服务架构看到了这种趋势,硬件、云技术、多核CPU和虚拟技术也在发展,所以我们要改变以前的开发方式。

在开始新项目的时候不要再使用EAR包或WAR包了。

现在我们可以在Docker里运行JVM,Docker只不过是一个进程,但它可以表现得像一个操作系统一样。

Docker运行在云端的操作系统上,而云端的操作系统运行在虚拟机里,虚拟机运行在Linux服务器上。

这些服务器不是归谁所有,而是被很多互不相识的人共享。

如果出现流量高峰怎么办?很简单,使用更多的服务器实例。

这就是为什么要把Java微服务运行在一个单独的进程里,而不是JavaEE容器或servlet容器。

微服务一般会提供基于HTTP/JSON的API端点。

这样可以很容易地与其他服务(开源或闭源的)集成,只要这些服务提供了HTTP/JSON接口。

服务可以通过更有意义的方式被消费、被组合。

EC2、S3及其他来自Amazon(或其他公司)的服务就是最好的例子。

基础设施会成为应用程序的一部分,而且它们是可编程的。

使用微服务架构的应用程序应该是模块化、可编程和可组合的。

微服务之间可以相互替换。

应用程序的局部可以被重写或改进,而不会影响到整个应用。

如果所有的组件都提供了可编程的API,那么微服务之间的交互就会变得更简单(永远不要相信那些不能通过curl访问的微服务)。

随着微服务逐渐流行起来,很多厂商开始尝试把他们的JavaEEWeb服务转成微服务,这样他们就可以继续卖他们的过时产品,APIGateway就是这些厂商中的一个。

JasonBloomberg是Intellyx的主席,他在一篇文章里指出了传统Web服务和微服务的区别,并对把传统Web服务转成微服务的趋势提出了质疑:

#/dangers-microservices-washing-get-value-strip-away-hype

微服务不是企业服务总线里的Web服务,也不是传统的面向服务架构,尽管它沿袭了SOA的一些基本概念。

从根本上来说,微服务跟SOA是不一样的,因为整个环境已经发生了彻底的转变。

微服务架构的环境是没有边界的:端到端,基于云的应用程序运行在完全虚拟和容器化的基础设施上。

容器把应用程序和服务组件化,DevOps为IT基础设施提供框架,帮助自动化开发、部署和管理环境。

虽然容器对微服务来说不是必需的,不过微服务可以很容易地运行在容器里。

况且,把非微服务的代码部署在容器里不是一个明智的选择。

Docker和其他容器技术在某种程度上已经被视为微服务的最好伴侣。

容器是运行微服务的最小资源子集。

Docker简化了微服务的开发,让集成测试变得更简单。

容器有助于微服务开发,但不是必需的。

Docker也可以被用来部署单体应用。

微服务与容器可以很好地相融并进,不过微服务包含的东西远比容器多!

结论


应用开发的风格这几年一直在变化,而微服务变得越来越流行。

大公司把大型应用拆分成可以单独部署的小型应用,这些小型应用被部署在云端的容器里。

开源微服务框架LightJava为这些运行在容器里的微服务提供了很多特性,它支持设计驱动,开发者只需要把注意力专注在业务逻辑上,剩下的事情可以由框架和DevOps流程来处理。

那么问题来了,你怎么看?





赞(0)
未经允许不得转载:优乐评测网 » 微服务架构中的云服务器发布管理 (微服务架构中,技术架构应用或服务在运行时)

优乐评测网 找服务器 更专业 更方便 更快捷!

专注IDC行业资源共享发布,给大家带来方便快捷的资源查找平台!

联系我们