.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. 24、配置Oracle下sqlplus历史命令的回调功能

    24.1.前言: 1.在oracle服务器上使用默认的sqlplus写sql命令时,如果写错了一个字母需要修改时,是无法通过 退格键消除错误的字母的,只能另起一行,重新写sql语句,而且也不能通过键盘 ...

  2. 笔记 BAT 面试题 及部分答案

    题目出自:https://www.jianshu.com/p/c70989bd5f29本文出自 AWeiLoveAndroid的博客 2018年2月20日星期二 随笔 笔记 BAT 面试题 一.jav ...

  3. Mybatis学习(6)与Spring MVC 的集成

    前面几篇文章已经讲到了mybatis与spring 的集成.但这个时候,所有的工程还不是web工程,虽然我一直是创建的web 工程.今天将直接用mybatis与Spring mvc 的方式集成起来,源 ...

  4. 二进制方式搭建Kubernetes集群

    环境准备: 演练暂时用单节点一台master和一台node节点来进行部署搭建(kubernetes 1.19版本) 角色 IP 组件 master 10.129.246.114 kube-apiser ...

  5. MySQL | Xtrabackup 安装

    rpm方式安装 # xtrabackup 2.4.8 安装包 wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup- ...

  6. Linux云计算-07_Linux文件服务器之vsftpd服务器

    本章向读者介绍企业vsftpd服务器实战.匿名用户访问.系统用户访问及虚拟用户实战等. 1 vsftpd服务器企业实战 文件传输协议(File Transfer Protocol,FTP),基于该协议 ...

  7. C语言:虚拟地址 和编译模式

    所谓虚拟地址空间,就是程序可以使用的虚拟地址的有效范围.虚拟地址和物理地址的映射关系由操作系统决定,相应地,虚拟地址空间的大小也由操作系统决定,但还会受到编译模式的影响.这节我们先讲解CPU,再讲解编 ...

  8. 个人博客开发之blog-api 项目整合JWT实现token登录认证

    前言 现在前后端分离,基于session设计到跨越问题,而且session在多台服器之前同步问题,肯能会丢失,所以倾向于使用jwt作为token认证 json web token 导入java-jwt ...

  9. java测试银行系统源代码

    1 package Kaoshi; 2 3 /*信1705-3 20173442 田昕可*/ 4 import java.util.*; 5 import java.io.*; 6 7 class A ...

  10. hadoop源码_hdfs启动流程_3_心跳机制

    hadoop在启动namenode和datanode之后,两者之间是如何联动了?datanode如何向namenode注册?如何汇报数据?namenode又如何向datanode发送命令? 心跳机制基 ...