.NetCore比较流行的微服务应该时是用Ocelot的方式构建微服务,纯配置化,开发量也比较小。但是做过一些项目之后发现这个方式不是很适合,首先它比较笨重,其次不支持gRpc和webSocket通信,最重要是它只适用于.NetCore,如果设计到其他语言如Java和Go就歇菜了。

终于曙光来了,随着Dapr的诞生,微软在开源的基础上有迈出了重要的一步,有人要问了,什么是Dapr,这个后续章节我会着重介绍,简单来说就是可以跨语言协同开发微服务。今天我们介绍一下一个轻量级的网关服务:Envoy,它是专为大型现代 SOA(面向服务架构)架构设计的 L7 代理和通信总线,体积小,性能高。Envoy 是一个独立进程,设计为伴随每个应用程序服务运行。所有的 Envoy 形成一个透明的通信网格,每个应用程序发送消息到本地主机或从本地主机接收消息,不需要知道网络拓扑,对服务的实现语言也完全无感知,这种模式也被称为 Sidecar。记住它的以下特点:

    L3/L4/L7 架构

    顶级 HTTP/2 支持

    服务发现和动态配置 

    gRPC 支持 

    特殊协议支持

    可观测性

    好了 废话不多说,我们来看下如何构建一个Envoy网关。

如上图所示:大概分了四大块,我也有备注

admin:域,定义网关的本身的地址和端口,日志信息等

static_resources:静态资源,定义监听服务端口,路由,过滤规则等

clusters:集群,服务发现,转发,健康检查,熔断等

rate_limit_service:限流服务,这个是独立的grpc服务,属于外挂服务,目前有go的demo

完整配置如下:

  1. admin:
  2. access_log_path: /tmp/admin_access.log
  3. address:
  4. # 本地配置
  5. socket_address:
  6. protocol: TCP
  7. address: 0.0.0.0
  8. port_value: 4001
  9. static_resources:
  10. listeners:
  11. # 监听端口
  12. - name: listener_0
  13. address:
  14. socket_address:
  15. protocol: TCP
  16. address: 0.0.0.0
  17. port_value: 4050
  18. filter_chains:
  19. #网关过滤规则
  20. - filters:
  21. - name: envoy.filters.network.http_connection_manager
  22. typed_config:
  23. "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
  24. stat_prefix: ingress_http
  25. codec_type: AUTO
  26. route_config:
  27. name: local_route
  28. # 路由配置
  29. virtual_hosts:
  30. - name: local_service
  31. domains: ["*"]
  32. routes:
  33. - name: service_a
  34. match:
  35. # 访问后缀
  36. prefix: "/ap0/"
  37. route:
  38. # 重写后缀
  39. prefix_rewrite: "/speak/"
  40. # 服务映射
  41. cluster: city_service
  42. http_filters:
  43. - name: envoy.filters.http.router
  44. # 服务集群
  45. clusters:
  46. - name: service_a
  47. connect_timeout: 0.25s
  48. type: static
  49. lb_policy: round_robin
  50. # 负载均衡服务集群
  51. hosts:
  52. - socket_address:
  53. address: 127.0.0.1
  54. port_value: 5041
  55. - socket_address:
  56. address: 127.0.0.1
  57. port_value: 5042
  58. # 被动动健康检查
  59. outlier_detection:
  60. consecutive_5xx: 2
  61. base_ejection_time: 40s
  62. max_ejection_percent: 40
  63. interval: 20s
  64. success_rate_minimum_hosts: 3
  65. success_rate_request_volume: 10
  66. # 主动健康检查
  67. health_checks:
  68. - timeout: 1s
  69. interval: 10s
  70. interval_jitter: 1s
  71. unhealthy_threshold: 6
  72. healthy_threshold: 1
  73. http_health_check:
  74. path: "/health"
  75. rate_limit_service:
  76. grpc_service:
  77. envoy_grpc:
  78. cluster_name: rate_limit_cluster
  79. timeout: 0.25s

说明

可以看出来:   1.监听的是4050端口,

2.设置了一个路由service_a,访问Url:/ap0/ 重写成 /speak/,

3.服务集群配置了两个服务:127.0.0.1:5041,127.0.0.1:5042,从而轻易的实现了负载均衡,默认轮询模式。

4.设置被动健康检查:outlier_detection,重现2次5xx访问之后,主动掉线服务,并且主动检查掉线服务,成功 success_rate_minimum_hosts: 3 次之后重新上线服务

5.health_checks,主动健康检查,10秒一次主动检查集群服务,连续6次失败之后,主动掉线服务,保证服务高可用。

部署:

Envoy采用的是Docker部署。下一节介绍如何启动Envoy网关服务

.NetCore+Envoy+Id4+Dapr+EFCore 构建微服务之Envoy的更多相关文章

  1. 技术分享:Dapr,让开发人员更轻松地构建微服务应用

    最近一直在学习微服务相关的技术.微服务架构已成为构建云原生应用程序的标准,并且可以预见,到2022年,将有90%的新应用程序采用微服务架构.微服务架构提供了令人信服的好处,包括可伸缩性,松散的服务耦合 ...

  2. 通过silky框架在.net平台构建微服务应用

    目录 必要前提 使用Web主机构建微服务应用 使用.NET通用主机构建微服务应用 构建具有websocket服务能力的微服务应用 构建Silky微服务网关 开源地址 在线文档 在线示例 必要前提 (必 ...

  3. 使用silky脚手架构建微服务应用

    目录 模板简介 构建独立应用的模板Silky.App.Template 构建模块化应用的模板Silky.Module.Template 开源地址 在线文档 模板简介 使用 dotnet new 命令可 ...

  4. [译]Spring构建微服务

    此文为译文,原文地址 介绍 本文通过一个使用Spring.Spring Boot和Spring Cloud的小例子来说明如何构建微服务系统. 我们可以通过数个微服务组合成一个大型系统. 我们可以想象下 ...

  5. 构建微服务:Spring boot

    构建微服务:Spring boot 在上篇文章构建微服务:Spring boot 提高篇中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jp ...

  6. 如何使用 Java 构建微服务?

    [编者按]微服务背后的大理念是将大型.复杂且历时长久的应用在架构上设计为内聚的服务,这些服务能够随着时间的流逝而演化.本文主要介绍了利用 Java 生态系统构建微服务的多种方法,并分析了每种方法的利弊 ...

  7. 构建微服务-使用OAuth 2.0保护API接口

    微服务操作模型 基于Spring Cloud和Netflix OSS 构建微服务-Part 1 基于Spring Cloud和Netflix OSS构建微服务,Part 2 在本文中,我们将使用OAu ...

  8. 基于Spring Cloud和Netflix OSS构建微服务,Part 2

    在上一篇文章中,我们已使用Spring Cloud和Netflix OSS中的核心组件,如Eureka.Ribbon和Zuul,部分实现了操作模型(operations model),允许单独部署的微 ...

  9. 构建微服务(Building Microservices)-PDF 文档

    闲时翻译了几篇基于Spring Cloud.Netflix OSS 构建微服务的英文文章,为方便分享交流,整理为PDF文档. PDF 文档目录: 目录 一.微服务操作模型... 3 1.     前提 ...

随机推荐

  1. 低代码开发LCDP,Power Apps系列 - 新建泰勒创新中心门户案例

    低代码简介 上世纪八十年代,美国就有一些公司和实验室开始了可视化编程的研究,做出了4GL"第四代编程语言",到后来衍生成VPL"Visual Programming La ...

  2. NUC980 运行 RT-Thread 驱动 SPI 接口 OLED 播放 badapple

    badapple 是什么,上网随便查了下,没看出个究竟,不过有个关于这个挺火的标签或者主题 < 有屏幕的地方就有 badapple >,网上有很多人用很多方式播放 badapple 动画, ...

  3. 8.QSharedPointer

    QSharedPointer 是一个共享指针, 同时是引用计数型的智能指针 ,也就是说,QSharedPointer可以被自由地拷贝和赋值,在任意的地方共享它. QSharedPointer内部会对拥 ...

  4. MyBatis框架的使用解析!数据库相关API的基本介绍

    动态SQL if 根据条件包含where子句的一部分 <select id="findActiveBlogLike" resultType="Blog"& ...

  5. Python自动化之封装日志模块(一)

    ------------恢复内容开始------------ 简介: 自己也在训练营学习之中,闲来之余,自己写着玩的,主要还是为了学习,希望和前辈和大佬相互学习共进. 日志模块主要有四大组件:日志器, ...

  6. WebService:java配置类形式发布WebService接口及遇见的问题总结

    配置WebService前需要以下依赖jar包 #版本只供参考,具体看项目 <dependency> <grouId>org.apache.cxf</grouId> ...

  7. Spring:Spring嵌套事务方式

    Spring遇到嵌套事务时,怎么实现 实验时却遇到一个奇怪的问题: 1.当ServiceA.a()方法调用ServiceB.b()方法时,内层事务提交和回滚,都不受外层事务提交或回滚的影响. 2.当S ...

  8. R 语言学习过程全记录 ~

    RStudio介绍超详细的教程:https://www.jianshu.com/p/132919ca2ca9 前辈的心得:https://blog.csdn.net/kMD8d5R/article/d ...

  9. FreeRTOS常用函数

    一.任务 任务创建和删除xTaskCreate                                 任务创建xTaskDelete                              ...

  10. GO系列-ioutil包

    ioutil包提供给外部使用的一共有1个变量,7个方法. // Discard 是一个 io.Writer 接口,调用它的 Write 方法将不做任何事情 // 并且始终成功返回. var Disca ...