javaweb应用开发与实践pdf_基于阿里云打造「云原生」Web应用——「懒猪行」Web应用开发实践...

作者:阿里云MVP 刘远程

背景

『懒猪行』专注于境外自由行S2B业务,涉及分销、终端用户服务、供应链等多个服务环节,随着业务规模的不端增加,我们一直在探索Web应用开发的最佳实践,以加快Web应用的迭代效率,为B/C端用户创造更多价值。

云原生

近几年,Spring Cloud为代表的微服务架构越来越火热,吸引了大量创业公司『入坑』。微服务系统的开发与单体应用的开发相比,从团队组织、运维、开发方式等多个方面带来了颠覆式的变化。从2018年开始以Istio、SOFAMesh等为代表的Service Mesh方案逐渐走上舞台,并被称为『下一代微服务架构』。

如果把以容器技术和Service Mesh为基础的IT架构定义为云原生架构,那么Dubbo、Spring Cloud为代表的分布式架构将是促进云原生架构诞生的『中间产物』。

b1eb49f96109dbae278df964b3607c1f.png

就在18年,云原生计算基金会(CNCF)为云原生技术重新定义:

Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.

『云原生技术帮助公司和机构在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。』

These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.

『这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术可以使开发者轻松地对系统进行频繁并可预测的重大变更。』

这种新颖架构方式,不仅提供了完善的软件持续交付链方案,也为我们的应用组织方式带来了巨大的想象空间,甚至在将来可能给整个软件行业带来颠覆式的革命。有一点是显而易见的:原本强耦合在一起的应用被拆分,变身成为能够实现完整子集功能的可插拔式微服务,通过有机的组织让其与其它微服务共同对外提供服务;就如同组装汽车的发动机和座椅等,它可以来自全球供应链不同的厂商。以云原生的设计哲学来总结,云原生应用具备微服务,健康报告,遥测数据,弹性声明式(非反应式)等特征。

云原生所带来的效果非常明显,但完整的实践确是很容易让人知难而退,因为单Kubernetes一项,从入门到掌握也需要花费3个月左右的时间。但幸运的是,阿里云等公有云平台已经为我们准备好了容器服务(Kubernetes版)产品,并支持通过Kubernetes进行应用的容器化管理。

在容器服务内部,通过Istio声明式的定义不同服务间的通信方式和安全验证规则,这使我们的多个服务(例如:订单、产品、用户、评论等服务)安全、灵活的整合在一起。以官方Bookinfo示例架构图如下:

8519af8a8aa358e5f1aa3e8222d1543e.png

所有的微服务都和 Envoy sidecar 集成在一起,被集成服务所有的出入流量都被 sidecar 所劫持,这样就为外部控制准备了所需的 Hook,然后就可以利用 Istio 控制平面为应用提供服务路由、遥测数据收集以及策略实施等功能。

懒猪行的架构设计(简化)

在新的架构中,使用了大量的阿里云产品,这鉴于我们过去的经验,阿里云产品在运维上为我们节省了不少精力。

696a2e67170f087fc112ecacab13b091.png

以上架构,是我们走向『云原生』的第一步,距离成熟还有非常大的发展空间,云原生的发展也在发展的起步阶段。按架构,把所有需要持久化的数据,如:文件、图片、数据库等存储到阿里云OSS、RDS及Redis产品,而应用则运行在以K8s管理调度的容器集群中。

阿里云DevOps工具链

阿里云在云原生架构整个生命周期都提供了完善的支持:

  1. 代码托管:阿里云Code
  2. 阿里云Code在社区版Gitlab的基础上做了改造,成为阿里云应用构建工具链的『基石』,为项目团队提供私有化的代码托管和团队权限管理。
  3. 镜像托管:容器镜像服务
  4. 容器镜像服务(Container Registry)提供安全的应用镜像托管能力,精确的镜像安全扫描功能,稳定的国内外镜像构建服务,便捷的镜像授权功能,方便用户进行镜像全生命周期管理。同时与阿里云Code、CodePipline产品无缝整合。
  5. 代码/Docker编译构建及发布:CodePipline
  6. 兼容Jenkins标准的、提供快速可靠的持续集成与持续交付服务。基于容器技术和阿里云基础服务架构,提供稳定和安全的代码/Docker编译构建,测试,扫描和部署的工具服务。与Kubernetes的集成方式参见文档:

部署到Kubernetes_部署到Kubernetes_选择部署方式_用户指南_CodePipeline-阿里云

  1. 容器管理:容器服务Kubernetes版
  2. 容器服务Kubernetes版(Container Service for Kubernetes)提供高性能可伸缩的容器应用管理服务,支持企业级Kubernetes容器化应用的生命周期管理,是实现云原生架构容器调度管理必不可少的工具。
  3. 日志归集分析:LOG日志服务
  4. 阿里云LOG Serivce,,从服务器、容器、Web终端的日志收集,到日志内容的查询和实时分析,为日志的采集和分析提供了闭环的支持。
  5. 可用性监控:云监控
  6. 主机、日志的服务可用性监控报警,及URL的站点全球可用性探测(云监控)。

推荐阅读:

[1] Service Mesher社区:ServiceMesher · Service Mesh|服务网格中文社区

[2] Kubernetes Handbook:序言 · Kubernetes Handbook - Kubernetes中文指南/云原生应用架构实践手册 by Jimmy Song(宋净超)

MVP招募进行中,点击「链接」

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python大型项目中的日志模块_Python中日志模块的使用

前言程序和脚本往往是无人值守运行的,一旦发生问题,就需要我们去追溯当时的情况来定位问题的原因。这便需要我们在程序和脚本中引入日志的功能。相比于print信息,使用logging日志有以下优点可以记录输出日志的时间、文件、函数以及代码行&…

OSI强调:SSPL并不是开源许可证

喜欢就关注我们吧!日前,开放源代码促进会 OSI(Open Source Initiative)强调,SSPL 并不是一个开源许可证。OSI 表示,SSPL(Server Side Public License) 是一种典型的 “fauxpen”&…

.NET Remoting

轉自:http://www.iiiedu.org.tw/knowledge/knowledge20030430_2.htm.NET Remoting 資策會數位教育研究所講師 董淑惠     概念簡介 微軟以往使用COM/DCOM的技術來處理分散式系統架構,透過Client端的Proxy代理程式來呼叫遠端Server機器上的物件。.NET Framework則…

通过python实现linux切换用户_Python操作远程服务器切换到root用户

在自动化运维过程中,需要远程服务器切换到root用户下执行命令,尝试了一些方法,得到如下好用的方法,供大家使用: import time import paramiko def verification_ssh(host,username,password,port,root_pwd,cmd): spara…

RabbitMQ 入门:1. Message Broker(消息代理)

Message Broker(消息代理)维基百科对 Message Broker 的定义是:Message broker是一种中介程序模块,它把消息从发送方的正式消息传递协议转化为接收方的正式消息传递协议。这个定义略繁琐,下面看看 RabbitMQ 官网对 Mes…

什么时候我们应谈及性能?

【导读】实际项目开发中、有部分童鞋可能无时无刻都在关注性能,那么我们到底应该什么时候关注性能呢?个人以为,性能并非一次性就可完全成全,需结合实际业务有一个大致评估或预期,比如数据量大小,若预期短暂…

python编写正则表达式匹配单词_Python正则表达式匹配整个单词

守候你守候我 我认为,通过给出的答案,OP所期望的行为并没有完全实现。具体来说,布尔值的期望输出没有完成。给出的答案做帮助说明这一概念,我认为他们是优秀的。也许我可以说明我的意思,我认为OP使用了下面的例子。给出…

python中可以表示任意大的整数_Python无法表示99999999999999999999这样大的整数。

被邓为“小平和国一部意义义的具有际意称赞法律历史,无法”的性的一个具有杰作创造“是是(。表示。对于的容性要密封求高器,样整数包括性试验的要求中应进行气密各种。无法喷涂金属及工具有设备。吊装台起用多重机设备时,表示为(吊装用的常采…

[转]简单介绍如何用Reporting Service制作报表

1) 在安装好Reporting Service后,打开Visual studio .net ,选择新建项目,选择建立商业智能项目,选择新建一个报表项目,命名为reportservice1,再选确定,如下图: 2)之后,在…

freertos源码详解与应用开发 pdf_互联网企业面试必问Spring源码?搞定Spring源码,看完这篇就够了...

不用说,Spring已经成为Java后端开发的事实上的行业标准。无数公司选择Spring作为基本开发框架。大多数Java后端程序员在日常工作中也会接触到Spring。因此,如何很好地使用Spring,已成为Java程序员的必修课之一。同时,Spring Boot和…

MS-SQLSERVER--错用了LEN()函数

sqlserver数据导入oracle时发现字符长度不对。。下面是两个函数的区别:DATALENGTH 返回任何表达式所占用的字节数。LEN 返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格转载于:https://www.cnblogs.com/yooplmqj/…

rsa算法c语言实现_数据结构与算法之线性表-顺序表实现(C语言版本)

原文托管在Github: https://github.com/shellhub/blog/issues/52数据结构与算法之线性表-顺序表实现(C语言版本)前言数据结构与算法是一个程序员必备的技能之一,而顺序表更是每个程序员在面试过程中要经常被问到的,如Java语言中的ArrayList类的底层实现就是使用顺序…

hadoop安装详细步骤_推荐一个超详细的Hadoop安装教程,已有32万次阅读

安装Hadoop软件系列,首选Linux系统,比如Ubuntu。如果你的系统是Windows,建议再安装一个Ubuntu,组成双系统,如此可以发挥各自系统的特点。使用U盘制作一个系统,拿出一块分区用作新装的系统,开机启…

后宫佳丽三千,假如古代皇帝也懂负载均衡算法...

古代皇帝,后宫佳丽三千,没法做到雨露均沾,但为了繁衍后代,子嗣繁盛,弱水三千,只取一瓢饮显然是不行的。不同的朝代有不同的宠幸妃子的方法,著名的有羊车望幸、掷筛侍寝、翻牌悬灯等等。如果皇帝…

mac 配置php和mysql_Mac下配置PHP+MySql环境

由于最近需要布置mantis用来进行bug追踪,在此记录其过程。由于PHP apache环境在Mac OS上是自带的,所以不需要另处下安装包,只需要简单配置一下即可。首先打开终端输入命令:sudo vim /etc/apache2/httpd.conf其中有一行是这样的#Lo…

git使用的基本流程_git命令的基本使用

首先下载完git之后打开Git Bash配置你的邮箱和用户名(github或gitee):$ git config --global user.name "注册时账号的名字"$ git config --global user.email "注册时使用的邮箱"获取ssh公钥:ssh-keygen -t …

Code Runner for VS Code 突破 2000 万下载量!支持超过 50 种语言

还记得五年前的夏天,我在巨硬写着世界上最好的语言,有时也需要带着游标卡尺写着另一门语言。然而,我对这两门语言都不熟悉,如果能在 VS Code 中方便快捷地运行各种语言,那岂不是很方便?于是,我就…

mysql group where_[MySQL] 测试where group by order by的索引问题

1. select * from test where axx group by b order by c 如何加索引CREATE TABLE index_test (id int(10) unsigned NOT NULL AUTO_INCREMENT,name varchar(100) NOT NULL DEFAULT ,gid int(11) NOT NULL DEFAULT 0,age int(11) NOT NULL DEFAULT 0,PRIMARY KEY (id)) ENGI…

gpl可以商用吗_一文看懂开源许可证,能不能商用再也不抓瞎

在github中闲逛,宝藏多福利好。不过心里或许总有小忐忑,这么多开源项目,我的产品里能不能用呀!其实想知道项目能不能用看下项目的开源许可证就清楚了(即使是非软件产品比如数据、媒体、资料等也可以通过开源许可证知道它们的可用范…

使用 Tye 辅助开发 k8s 应用竟如此简单(一)

最近正巧在进行 Newbe.Claptrap 新版本的开发,其中使用到了 Tye 来辅助 k8s 应用的开发。该系列我们就来简单了解一下其用法。安装 Tye 首先,确保已经正确安装了 netcore 2.1 或以上版本的 dotnet SDK。Tye 目前还处于开发阶段,因此&#xff…