微服务架构saas配置性(微服务 saas)
微服务 saas
pass层
Pass 层细分为三层,基础服务层,主要负责数据存储处理;事务框架层,主要负责微服务的注册·调度管理、分布式事务处理;应用服务层、主要实现各个微服务的 API,供其它微服务直接调用以及 Saas 层的服务调用。Saas 服务就是公开对外提供的业务服务。
saas层
PaaS层:可以理解为平台层,通俗意义上的后台,或者是阿里提的中台,就在这里。
SaaS层:可以理解为用户层。用户看到的和使用的东西,web网页、APP、报表等。
微服务sla
skywalking与pinpoint全链路追踪方案对比
由于公司目前有200多微服务,微服务之间的调用关系错综复杂,调用关系人工维护基本不可能实现,需要调研一套全链路追踪方案,初步调研之后选取了skywalking和pinpoint进行对比;
选取skywalking和pinpoint对比的原因是:两者都使用探针(agent)技术进行信息采集,集成到项目内时不用修改业务代码,避免造成后期难以推进的问题;
以下是进行的一些维度的对比,主要从功能性需求和非功能性需求方面做参考:
功能性需求对比
skywalking pinpoint 备注
支持协议
Java, C#, PHP, Node.js
java,php
ui
两种ui相类似,sw服务信息加载速度会快一些
扩展性
都可自定义plugin,使用探针,都可以进行扩展,据说sk扩展性更好
存储
支持各种类型存储,es,mysql,h2等
只支持hbase
警告
config/alarm-settings.xml设置警告规则
需要额外引入mysql发送警告
jvm监控
都包含,pinpoint相对更全面一些,从页面查看比较类似
跟踪粒度
需要使用对应的插件,可以到方法级,展示sql,每个方法调用的时间
服务监控
skywalking支持的维度有:CPU使用率,SLA,RT,CPM(Call Per Minutes)
Pinpoint支持的维度有:CPU使用率,Open File Descriptor,数据源,活动线程数,RT,TPS。
pinpoint更多
过滤追踪
都是用ant风格,sw有对应的插件,更灵活
性能损耗
性能损耗sw少于pinpoint
支持中间件
1.支持开源web容器
2.RPC框架支持更多
3.mq,多支持rocketMQ
4.不支持mssql和mariadb
5.redis支持Jedis,Redisson,Lettuce
1.支持几乎所有web容器,
2.少于sw
4.RDBMS/nosql,好于sw
5.不支持redisson
6.不支持log4j2
公司当前使用的resin
和karaf容器两个是否支持
对代码的侵入性
无侵入
无侵入
非功能性需求对比
skywalking
pinpoint
是否需要修改代码
不需要
不需要
相关文档
官网文档比较全,支持中文,apache支持
英文文档
社区
社区活跃,发起人是中国人
韩国人开发,活跃程度类似
发布方式
使用jar包,start.sh脚本启动
使用war包,依赖web容器
github start 数 9.1k 8.8k
skywalking对国产软件的支持好于Pinpoint;
Pinpoint的优势在于:追踪数据粒度非常细、功能强大的用户界面,以及使用HBase作为存储带来的海量存储能力。
skywalking的优势在于:非常活跃的中文社区,支持多种语言的探针,对国产开源软件非常全面的支持,以及使用es作为底层存储带来的强大的检索能力,并且skywalking的扩展性以及定制化要更优于Pinpoint
从整体上来讲,在进行演示和讨论的时候,大家普遍认为,skywalking的界面比较现代化一些,pinpoint的功能更为强大;
其他一些方面提出的问题,待近期补充:
后边需要继续调研的点:
1.对公司现有技术栈,两种方案的支持情况;
2.扩展性及如何进行扩展,扩展之后可以做哪些内容;
3.采样率如何配置
4.保存时间
5.采样的策略
6.agent开发方法
7.数据是否有遵循标准
8.nginx是否支持
另外,再讨论的过程中,提到了一些问题,
有同事提出是否可以用这个工具定位线上的具体都某一次请求的问题?
答案是否定的,因为全链路追踪的定位是展示整体服务调用的拓扑图,能够从宏观描述服务请求链路中哪个环节比较慢,给开发者提供优化程序的一个方向;
对于性能消耗,大家也有一些不同的看法,有的业务方,对于20%的性能损耗是不敏感的,但是对于当前线上已经负载比较高,且经常有线上问题的系统,还需要性能消耗方面的调研;
微服务和saas的区别
没太大区别,功能上基本一致,小程序可能只是你看到的前端(就是所谓的用户端),其实这么理解小程序是不完整的。
一个完整的应用是要分前后端的,前端就是我们常说的用户端,就是使用小程序的人打开的那个界面和点选各种小程序的功能按钮获得的各种加载界面,这是用户端的各种功能属性,这个只是小程序的一部分。
还有一端是放在运营者这边的,因为现在很少在用商家用纯静态的网站了,发布一款应用的目的就是运营用户,肯定得有一个后端管理系统,这个用户是感知不到的,就好比酒店的收银后台和一套自己的管理系统,用户是没有必要去知道和参与的,这是小程序的后端。
saas服务的小程序和传统小程序的区别就是,你的后端是放在别人的服务器上只给你开个功能界面,还是你自己要买服务器,把后端相关的代码部署到自己买的服务器上的区别。
微服务架构 nacos
虽然都可以用于构建分布式系统,但是它们之间有以下区别:
1. 版本
Spring Cloud是由Spring社区推出的微服务框架,目前最新版本为2020.0.1,而Alibaba是由阿里巴巴公司推出的微服务框架,最新版本为2.2.3。
2. 实现方式
Spring Cloud基于Spring生态体系,采用了各种开源的组件,包括Eureka注册中心、Zuul网关、Ribbon负载均衡等,同时也支持多语言的开发。而Alibaba采用了自己研发的组件,如Nacos注册中心、Sentinel熔断降级等,更加适合在阿里云等企业内部使用。
3. 社区支持
Spring Cloud是一个活跃的开源社区,有众多的开发者参与其中,因此有更多的用户和文档支持;而Alibaba的开源社区相对较小,因此用户和文档支持相对较少。
4. 生态系统
Spring Cloud生态系统更加成熟,拥有全面的Spring Boot支持,并且有大量的插件和工具可供选择。而Alibaba生态系统主要依赖于Dubbo和Spring Cloud,因此在特定场景下需要考虑和集成这些组件。
总的来说,Spring Cloud更加注重通用性和灵活性,在不同场景下可以选择不同的组件和工具;而阿里巴巴更加注重自己内部的使用场景,并提供了相应的解决方案。因此,在选择微服务框架时,需要根据自身的实际情况和需求进行评估和选择。
微服务架构160讲
微服务是就一种用于构建应用的技术架构,他是IT技术发展的产物。微服务架构有别于更为传统的单体架构、垂直架构,它的特点是每个核心的功能,都可以作为一项服务,每个服务都有自己的运行环境、数据库,可以单独部署和运行,这意味着各项服务在工作(和出现故障)时不会相互影响,从而将单点故障产生的影响降到最低。
微服务架构解决方案
微服务架构上篇
1. grpc技术介绍
2. grpc+protobuf+网关实战
3. etcd技术介绍
4. 基于etcd的服务发现与注册
5. 基于etcd的分布式锁实战
2. 微服务架构中篇
1. k8s架构介绍
2. 基于k8s的容器化部署
3. 基于k8s的Deployment工作负载
4. 基于k8s的ingress实战
5. 基于ingress和service实现灰度发布
6. 常见的服务治理策略
3. 微服务架构下篇
分布式链路追踪实战
干货:
什么是APM
什么是Opentracing
什么是SpanID
什么是TraceID
基于zipkin构建链路追踪
1. 什么是APM
APM(Application Performance Management,即应用性能管理,在分布式领域也称为分布式跟踪管理)对企业的应用系统进行实时监控,它是用于实现对应用程序性能管理和故障管理的系统化的解决方案。
APM核心功能:
服务调用跟踪
应用系统存活检测
监控告警
开源APM管理工具:
ZipKin
PinPoint
SkyWalking
Prometheus
我们这篇文章主要是讲解APM的核心功能之一:服务调用跟踪,用到的工具是ZipKin,本来想用Prometheus搭建一个监控平台,想来想去比较简单,大家直接在本地就可以搭建单机版的监控平台。
2. 什么是Opentracing
OpenTracing通过提供平台无关、厂商无关的API,使得开发人员能够方便的添加(或更换)追踪系统的实现。
不过OpenTracing并不是标准。因为CNCF不是官方标准机构,但是它的目标是致力为分布式追踪创建更标准的API和工具。
3. 什么是TraceID
一个trace代表了一个事务或者流程在(分布式)系统中的执行过程,而这个过程会有唯一ID去标识,这个唯一ID就是Trace ID,通俗解释就是一个API请求的完整调用流程。
4. 什么是SpanID
一个span代表在分布式系统中完成的单个工作单元,这个工作单元有唯一ID去标识,这个唯一ID就是Span ID。也包含其他span的“引用”,这允许将多个spans组合成一个完整的Trace。
通俗解释就是在Trace这样一个完整调用的流程中,Span扮演的角色就是每次执行的一次IO或者非IO操作。所以你通过Trace找到整个链路,然后从链路中找到确定的Span,这样就可以准确定位一次问题或者性能查询。
5. 其他名称解释
Span tags(跨度标签)可以理解为用户自定义的Span注释。便于查询、过滤和理解跟踪数据。
Span logs(跨度日志)可以记录Span内特定时间或事件的日志信息。主要用于捕获特定Span的日志信息以及应用程序本身的其他调试或信息输出。
SpanContext 代表跨越进程边界,传递到子级Span的状态。常在追踪示意图中创建上下文时使用。
6. 案例
执行时间的上下文,服务间的层次关系,服务间串行或并行调用链,结合以上信息,在实际场景中我们可以通过整个系统的调用链的上下文、性能等指标信息,一下子就能够发现系统的痛点在哪儿。
7. 什么是ZipKin
Zipkin是分布式追踪系统。它的作用是收集解决微服务架构中的延迟问题所需的时序数据。它管理这些数据的收集和查找。
Zipkin的设计基于Google Dapper论文。
8. 基于ZipKin构建链路追踪
首先在基于之前的项目之中,把server.go修改一下,让其支持分布式链路追踪。server.go:
至此我们的grpc服务就有了链路追踪功能,接下来我们演示下,启动server.go:k8s-grpc-demo go run cmd/svr/svr.go -port 50004
然后启动客户端:k8s-grpc-demo go run cmd/cli/cli.go
我们可以看下server.go的日志:图片我们发现日志完美记录到ZipKin中,接下来我们看下ZipKin地址:图片当我们点击RUN QUERY的时候可以看到如下:图片当我们点击某一个Trace的时候,就进入这个Trace的整个调用链路详情中:
这样我就基于gRPC + Opentracing + Zipkin的分布式链路追踪系统就搭建完成了,大家下去可以自己尝试下。
微服务架构较soa的优势
1. SOA 关注的是服务的重用性、以及解决企业内部的信息孤岛问题 。
2. 微服务关注的是解耦,解耦和可重用性在特定的角度来看是一样,但本质上是不同的。解耦是降低业务之间的耦合度(也就是微服务关注的服务粒度),而可重用性关注的是服务的复用。
3. 微服务会使用更轻量级的通信协议,使用Restful风格的API。轻量级协议可以很好的支持跨语言,是的语言生态更加丰富 。
4. 微服务会更多的关注Devops的持续交付,因为服务粒度更细使得开发运维变得更加重要。所以微服务对于容器化技术的结合更加紧密 。5. SOA应该是微服务的超集
微服务架构 soa
比较建议微穿戴的 微穿戴是国内偏向大众化的智能手表牌子,而且有十多年的智能手表研发和制造经验,不仅档次高,口碑方面也是相当不错
微服务架构适用场景
微服务架构是一种软件架构模式,它将软件系统划分为一组小的、独立的、可替换和可扩展的服务单元,每个服务单元都可以独立地运行、部署和升级。微服务架构可以提高系统的可靠性、可扩展性和可维护性,可以促进团队协作和快速迭代。下面是微服务架构的最强详解:
1. 微服务的特点
微服务具有以下特点:
- 单一职责原则:每个微服务都只具有唯一的、独立的职责。
- 松耦合:微服务之间是松耦合的,可以独立地部署和运行。
- 独立性:每个微服务都可以独立地进行开发、测试、部署和升级。
- 可替换性:微服务可以被随时替换,不会对系统的整体运行产生影响。
- 可扩展性:微服务可以根据需要进行水平扩展,从而提高系统的性能和可用性。
- 自治性:每个微服务都可以独立地进行运行时配置和监控,保证系统的稳定性和可靠性。
2. 微服务的优缺点
微服务架构具有以下优点:
- 可扩展性:微服务架构可以根据需要进行水平扩展,从而提高系统的性能和可用性。
- 灵活性:微服务架构可以根据业务需求进行快速迭代和部署,提高了软件开发的灵活性和敏捷性。
- 可靠性:微服务架构可以将系统拆分成小的、独立的服务单元,从而提高了系统的可靠性和容错性。
- 可维护性:微服务架构可以将系统分解成独立的服务单元,从而便于进行系统维护和升级。
微服务架构的缺点包括:
- 复杂性:微服务架构需要将系统划分成许多小的服务单元,从而增加了系统的复杂性。
- 通信开销:微服务架构需要使用网络通信进行服务之间的交互,从而增加了通信开销。
- 一致性问题:微服务架构会带来一些一致性问题,例如分布式事务的管理等。
3. 微服务的架构图
微服务的架构图包括以下组件:
- 服务:服务是一个独立的、可部署的软件单元,可以提供特定的业务功能。
- api 网关:api 网关作为入口,接受外部请求并将请求路由到相应的服务上。
- 服务注册与发现:服务注册与发现可以帮助服务之间进行自动的发现和通信。
- 配置中心:配置中心可以帮助微服务进行配置管理和运行时配置修改。
- 告警与监控:告警与监控可以帮助微服务进行运行时监控和异常处理。
4. 微服务的开发技术栈
微服务的开发技术栈包括以下技术:
- 服务框架:spring boot、node.js 等。
- 消息队列:rabbitmq、kafka 等。
- 数据库:mysql、mongodb 等。
- 配置中心:consul、zookeeper 等。
- api 网关:zuul、api gateway 等。
- 容器技术:docker、kubernetes 等。
5. 微服务架构的最佳实践
微服务架构的最佳实践包括以下几点:
- 拆分粒度:拆分微服务时要考虑单一职责原则,避免拆分过细或过大。
- 接口设计:接口设计要遵循 restful 风格,考虑接口的易用性和可读性。
- 集成测试:在集成测试阶段要考虑微服务之间的依赖关系和接口兼容性问题。
- 部署测试:在部署测试时要考虑运行时配置和环境兼容性问题。
- 异常处理:在微服务架构中要考虑异常处理和容错性问题,避免单点故障和系统崩溃。
- 监控系统:微服务架构需要建立完善的监控系统,从而可以及时发现和修复问题。
总之,微服务架构是一种新的软件架构模式,可以提高系统的可扩展性、可维护性和可靠性,但需要注意复杂性、通信开销和一致性问题。在开发微服务时要考虑拆分粒度、接口设计、集成测试等最佳实践。
本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.