前言 上篇文章实际上只讲了服务治理中的服务注册,服务与服务之间如何调用呢?传统的方式,服务A调用服务B,那么服务A访问的是服务B的负载均衡地址,通过负载均衡来指向到服务B的真实地址,上篇文章已经说了这种方式的缺点.那么下面讲如何在spring cloud+dotnet core的应用下进行服务调用. 代码实现 假设一种场景,有一个订单服务,有一个产品服务,其中产品服务是由两个服务节点组成一个集群.需求是订单服务访问产品服务的一个API接口.根据上一章文章的内容创建3个应用程序ServiceOne…
前言 上篇文章实际上只讲了服务治理中的服务注册,服务与服务之间如何调用呢?传统的方式,服务A调用服务B,那么服务A访问的是服务B的负载均衡地址,通过负载均衡来指向到服务B的真实地址,上篇文章已经说了这种方式的缺点.那么下面讲如何在spring cloud+dotnet core的应用下进行服务调用. 代码实现 假设一种场景,有一个订单服务,有一个产品服务,其中产品服务是由两个服务节点组成一个集群.需求是订单服务访问产品服务的一个API接口.根据上一章文章的内容创建3个应用程序ServiceOne…
上一次我们简单介绍了什么是微服务(.NET Core with 微服务 - 什么是微服务 ).介绍了微服务的来龙去脉,一些基础性的概念.有大佬在评论区指出说这根本不是微服务.由于本人的能力有限,大概也只能理解到这个层次.先不管它到底是不是微服务吧,既然开篇了,那就硬着头皮把这个系列写完.我想不管是对自己对看官多少还是有点帮助的. 架构图 这篇文章将从一张架构图开始说起(开局一张图,内容全靠凑). 很多介绍微服务架构的文章画的架构图比这张图复杂的多.我根据自己的理解与实践修改跟精简了一下. 上次评…
背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代理,项目最终上线.但是这远远没达到微服务的要求,其中服务治理,断路器都没有.我个人理解,我们谈微服务实际上更多的是谈服务治理这块东西,至于各个的服务只是微服务中的应用而已.一次偶然的机会发现了java的spring cloud这套框架,而且支持dotnet core集成(Steeltoe OSS).…
前言 国庆假期,一直没有时间更新. 根据群里面的同学的提问,强烈推荐大家先熟悉下spring cloud.文章下面有纯洁大神的spring cloud系列. 上一章最后说了,因为服务是不对外暴露的,所以在外网要访问服务必须通过API网关来完成,而spring cloud 提供了现成的api网关组件zuul.它包含了路由,授权,压力测试等一系列功能. 代码实现 使用intellij idea创建一个spring boot项目,搭建api网关服务.设置端口为5555. pom.xml <depend…
前言 我们项目中有很多需要配置的地方,最常见的就是各种服务URL地址,这些地址针对不同的运行环境还不一样,不管和打包还是部署都麻烦,需要非常的小心.一般配置都是存储到配置文件里面,不管多小的配置变动,都需要对应用程序进行重启,对于分布式系统来说,这是非常不可取的.所以配置中心就在这种场景孕育出来,能够适配不同的环境,正在运行的程序不用重启直接生效. 介绍 现在开始介绍我们今天的主角spring cloud config,我觉得它最大的优点就是可以和git做集成,使用起来非常方便.spring c…
前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这一功能.这一章的例子,客户端的部分我们采用Java来实现.Steeltoe更新以后我会及时把 .Net Core的实现方式补全. 实际上也并不需要重启,客户端调用IConfigurationRoot.Reload()方法也可以实现这个功能,但是去请求客户端也不是一个好办法,因为N节点的配置中心客户端…
前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本是Java,.NET的天下,后端渲染页面的时代已经一去不复返,当然这是时代的进步.前端调用后端服务目前大多数基于JSON的HTTP服务,那么就引入的我们今天的内容.客户端访问服务的时候怎么保证安全呢?很多同学都听说过OAuth2.0,都知道这个是用来做第三方登录的,实际上它也可以用来做Api的认证授…
背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代理,项目最终上线.但是这远远没达到微服务的要求,其中服务治理,断路器都没有.我个人理解,我们谈微服务实际上更多的是谈服务治理这块东西,至于各个的服务只是微服务中的应用而已.一次偶然的机会发现了java的spring cloud这套框架,而且支持dotnet core集成(Steeltoe OSS).…
前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本是Java,.NET的天下,后端渲染页面的时代已经一去不复返,当然这是时代的进步.前端调用后端服务目前大多数基于JSON的HTTP服务,那么就引入的我们今天的内容.客户端访问服务的时候怎么保证安全呢?很多同学都听说过OAuth2.0,都知道这个是用来做第三方登录的,实际上它也可以用来做Api的认证授…
前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这一功能.这一章的例子,客户端的部分我们采用Java来实现.Steeltoe更新以后我会及时把 .Net Core的实现方式补全. 实际上也并不需要重启,客户端调用IConfigurationRoot.Reload()方法也可以实现这个功能,但是去请求客户端也不是一个好办法,因为N节点的配置中心客户端…
前言 我们项目中有很多需要配置的地方,最常见的就是各种服务URL地址,这些地址针对不同的运行环境还不一样,不管和打包还是部署都麻烦,需要非常的小心.一般配置都是存储到配置文件里面,不管多小的配置变动,都需要对应用程序进行重启,对于分布式系统来说,这是非常不可取的.所以配置中心就在这种场景孕育出来,能够适配不同的环境,正在运行的程序不用重启直接生效. 介绍 现在开始介绍我们今天的主角spring cloud config,我觉得它最大的优点就是可以和git做集成,使用起来非常方便.spring c…
前言 国庆假期,一直没有时间更新. 根据群里面的同学的提问,强烈推荐大家先熟悉下spring cloud.文章下面有纯洁大神的spring cloud系列. 上一章最后说了,因为服务是不对外暴露的,所以在外网要访问服务必须通过API网关来完成,而spring cloud 提供了现成的Api网关组件zuul.它包含了路由,授权,压力测试等一系列功能.如下图所示,Api网关在整个应用环境的位置. 业务场景 我们先模拟一个业务场景,客户端(web,ios,android...)通过Api网关访问订单服…
http://www.cnblogs.com/longxianghui/p/7561259.html spring cloud+.net core搭建微服务架构:服务发现 最近在跟随着园区内的这个博客做服务发现的时候,发觉在vs 上调整了端口后还是无法实现通过,order 服务访问product,一访问 就抛出错误.经过近乎两周的时间 发现,通过 cmd 命令行启动后,可以实现服务消费 .  当然 ,也可按照评论所说的发布到iis上,我没这么发布处理,一来我是觉得不够方便快捷,二来,我是希望脱离…
上一次我们通过一张架构图(.Net Core with 微服务 - 架构图)来讲述了微服务的结构,分层等内容.从现在开始我们开始慢慢搭建一个最简单的微服务架构.这次我们先用几个简单的 web api 项目以及 ocelot 网关项目来演示下网关是如何配置,如何工作的. Ocelot 网关 Ocelot 是使用 asp.net core 开发的一个 api 网关项目.它功能丰富,集成了路由.限流.缓存.聚合等功能.它使用 .net 编写,本质上就是一堆 asp.net core 的中间件,所以它天…
上一次我们介绍了 Ocelot 网关的基本用法.这次我们开始介绍服务注册发现组件 Consul 的简单使用方法. 服务注册发现 首先先让我们回顾下服务注册发现的概念. 在实施微服务之后,我们的调用都变成了服务间的调用.服务间调用需要知道IP.端口等信息.再没有微服务之前,我们的调用信息一般都是写死在调用方的配置文件里(当然这话不绝对,有些公司会把这些信息写到数据库等公共的地方,以方便维护).又由于业务的复杂,每个服务可能依赖N个其他服务,如果某个服务的IP,端口等信息发生变更,那么所有依赖该服务…
上一次我们介绍并演示了如果使用 Consul 做为我们微服务的注册中心,来实现服务的注册与发现.那么本次我们讲会演示如何做日志聚合.日志聚合比较常用的有 ELK 等,但是这次我想要介绍的是一款比较小众的日志聚合工具 - Seq . 日志聚合 日志是我们写程序离不开的一个东西.在我们排查问题的时候日志就是我们的救命稻草.我们的每个服务都在不停的生产日志.但是实施微服务后,如果按照传统的写本地文件的日志方案,显然会面临跟修改配置一样麻烦的境地.不同的日志分散在各个服务器.容器内,这种情况下查日志简直…
上一次我们介绍了Seq日志聚合组件.这次要给大家介绍的是Elastic APM ,一款应用程序性能监控组件.APM 监控围绕对应用.服务.容器的健康监控,对接口的调用链.性能进行监控.在我们实施微服务后,由于复杂的业务逻辑,服务之间的调用会像蜘蛛网一样复杂.有了调用链监控后服务之间的调用可以用图像的方式展示出来,每个请求的性能,响应等都会记录下来.对于提前防范问题,以及排查问题有非常大的意义. Elastic APM 大家对 ELK 套件一定非常熟悉.ELastic APM 同样也是 Elast…
上一次我们介绍了Elastic APM组件.这一次我们继续介绍微服务相关组件配置中心的使用方法.本来打算介绍下携程开源的重型配置中心框架 apollo 但是体系实在是太过于庞大,还是让我爱不起来.因为前面我们已经介绍了使用Consul 做为服务注册发现的组件,那么干脆继续使用 Consul 来作为配置中心吧.Consul 除了服务注册发现功能,还有个 Key/Value 存储的功能,我们把本地的 appsettings.json 文件的内容搬到 Key/Value 上就可以实现配置中心了. 把服…
在我们实施微服务之后,服务间的调用变的异常频繁.多个服务之间可能是互相依赖的关系.某个服务出现故障或者是服务间的网络出现故障都会造成服务调用的失败,进而影响到某个业务服务处理失败.某一个服务调用失败轻则造成当前相关业务无法处理:重则可能耗尽资源而拉垮整个应用.为了尽可能的保证我们生产环境的可用性,至少是部分可用性我们就需要一些策略来保护我们的服务. 服务降级 比如我们的订单详情服务里面会调用会员信息服务接口.如果会员信息服务接口故障会造成订单详情服务也同样故障.这时候我们可以对会员信息服务接口进…
最近比较忙,好久没更新了.这次我们来聊一聊分布式事务. 在微服务体系下,我们的应用被分割成多个服务,每个服务都配置一个数据库.如果我们的服务划分的不够完美,那么为了完成业务会出现非常多的跨库事务.即使按照 DDD 的原则来切分服务还是免不了有的业务场景需要多个业务同时提交成功或者同时回滚的场景.比如会员使用积分下订单这个场景,那么会员服务的积分扣减需要跟订单下单成功同时完成.如果下单成功,但是扣减积分接口失败,那么就会造成数据的不一致性.这个时候我们就需要使用分布式事务来保证数据的一致性. 由于…
上一次我们讲解了分布式事务的 2PC.3PC .那么这次我们来理一下 TCC 事务.本次还是讲解 TCC 的原理跟 .NET 其实没有关系. TCC Try 准备阶段,尝试执行业务 Confirm 完成业务 Cancel 回滚准备阶段的业务 TCC 事务其实是 2PC 的一个扩展.上一次我们说了 2PC ,在二阶段进行事务提交.因为 2PC 基本上是利用数据库的 事务能力进行 commit ,其实这里还有可能出现一种 rollback 情况. TCC 就是把 2PC 的二阶段细化了,拆分成了 C…
前言 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案.对于Seata不太了解的朋友,可以看下我之前写的文章: 微服务开发的最大痛点-分布式事务SEATA入门简介. AT模式 AT模式怎么理解 AT模式下,每个数据库被当做是一个Resource,Seata 里称为 DataSource Resource.业务通过 JDBC 标准接口访问数据库资源时,Se…
前言 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案. 对于Seata不太了解的朋友,可以看下我之前写的文章: 微服务开发的最大痛点-分布式事务SEATA入门简介 微服务痛点-基于Dubbo + Seata的分布式事务(AT模式) TCC模式 TCC模式怎么理解 TCC(Try-Confirm-Cancel)实际上是服务化的两阶段提交协议,业务开发者需…
MicroService.Core MicroService.Core 的初衷是为了方便的创建一个微服务, 可作为 Windows Service 或者控制台模式启动. 它底层使用了 OWin 自托管技术,抛弃了微软 Mvc 的那套东 西,进而选择了 Nancy,使得开发过程很顺心,很简单! 快速入门 一.创建控制台项目(需要.net 4.5以上) 二.安装Nuget包 PM> Install-Package MicroService.Core -Version 1.1.1 或在 Nuget 包…
1.OceLot中间件介绍 在传统的BS应用中,随着业务需求的快速发展变化,需求不断增长,迫切需要一种更加快速高效的软件交付方式.微服务可以弥补单体应用不足,是一种更加快速高效软件架构风格.单体应用被分解成多个更小的服务,每个服务有自己的独立模块,单独部署,然后共同组成一个应用程序.把范围限定到单个独立业务模块功能.分布式部署在各台服务器上. 而Ocelot开发的目标就是使用.NET运行面向微服务/服务的架构,要达到这个目标需要一个统的系统入口点(我们统称为API网关),同时需要与Identit…
本项目采用ASP.Net Core微服务技术,搭建博客和Saas平台. 全文将围绕(1)设计模式  (2)敏捷开发 目的: 结构足够合理,代码足够优美,扩展性.可读性.易维护性做到最优. 以下目录仅为整体思路,后期逐渐完善补充. 1.配置linux环境实现持续集成 2.快速搭建 ASP.net core Web 应用 3.单元测试 4.数据持久化(基于YesSql,打算使用EFCore重新做) 5.用户管理及登录页面 6.分布式通信----MessagePack序列化 7.分布式通信----Ne…
### 前言 前几天在博客园看到有园友在分享关于微软的一个微服务架构的示例程序,想必大家都已经知道了,那就是[eShopOnContainers](https://github.com/dotnet-architecture/eShopOnContainers). 我们先不看项目的后缀名称 OnXXX ,因为除了 OnContainers 还有 OnAzure,OnWeb,OnKubernetes 以及 OnServiceFabric. 我们就还是来先说说 eShop 这个项目吧,eShop 是…
前言 接上一篇. 上一篇未完待续的原因是当时刚好是6-30号晚上马上12点了还没写完,然后我想赶在7月1号之前发出去,所以当时就发了.然后在发的时候出了一点问题,结果发出去的时候刚好是 7.1号 00:00分,所以就很尴尬~~ 这一篇,我们就接着说一说微服务吧. 接上文 第四步,重构. 当你写完代码之后,我认为有一个比较重要的步骤就是对写的代码进行一番重构,重构一般从两方面下手,第一方面是代码的命名以及格式,第二方面是代码的组织结构. 针对于代码命名以及格式的重构其实是有方法和技巧的,比如方法的…
目录 前言 目标 工具 - 最小的学习成本 方案 - 愿景 1. 持续集成 - CI 2. 持续部署 - CD 部署环境 1. 部署gitlab-runner 2. 注册gitlab-runner 搭建DevOps管道 - PipeLines 1. 创建环境 - 发布主板本 2. 滚动更新 - 迭代小版本 3. 自动伸缩 4. 回滚 5. 可扩展性 - 兼容新增微服务 运维说明 1.分支 2.配置文件 总结 最后 前言 2018年既是微服务架构火爆的一年,也是容器和Kubernetes收获赞誉盆…