.NET微服务最佳实践 eShopOnContainers
本文翻译自微软Docs, 内嵌译者多年使用的参悟,如理解有误,请不吝赐教。
微软与社区专家合作,开发了功能齐全的云原生微服务示例应用eShopOnContainers。
该应用旨在展示使用.NET、Docker以及可选的Azure,Kubernetes技术来构建电商平台。
功能 & 要求
简要回顾eShopOnContainers应用的业务功能和技术目标,eShopOnContainers示例应用代表一个出售各种实体产品的(例如T恤和咖啡杯)电商平台。
电商平台要实现的一些基本功能:
- 列出商品目录
- 按类型过滤商品
- 按品牌过滤商品
- 将商品添加到购物车
- 编辑或删除购物车中的物品
- 支付
- 注册帐号
- 登录
- 登出
- 订单审核
示例应用还具有以下非功能性要求:
- 必须具有高可用性,并且必须自动扩展以满足不断增长的流量(并在流量减少后再缩减)。
- 提供易于使用的运行状态监视和诊断日志,以帮助解决遇到的问题。
- 它应该支持敏捷开发,包括对持续集成和部署(CI / CD)的支持。
- 除了支持传统的和SPA Web前端之外,该应用程序还必须支持不同系统的移动客户端应用程序。
- 支持跨平台托管和跨平台开发。
Web或移动客户端通过HTTPS访问ASP.NET Core MVC服务器程序或API网关程序
。
API网关具有多种优势,例如将后端服务与各个前端客户端解耦,并提供更好的安全性。
该应用程序还利用了BFF模式(服务于前端的后端)
,该模式建议为每个前端客户端创建单独的API网关。
上面的体系图演示了基于请求是来自Web客户端还是来自移动客户端的API网关
。
示例应用的功能被分解为许多不同的微服务:
- 负责身份验证和身份
- 列出产品目录中的商品
- 购物车管理以及订单管理。
这些独立的服务都有其自己的持久化存储,没有可以与所有服务交互的单个主数据存储,
服务之间的协调和通信是通过消息总线
来完成的。
每个微服务根据其各自的需求独立设计。因此它们的技术堆栈是可以不同的(目前服务均是.NET构建并为云设计)。
简单的服务提供了基本的创建、读取、更新、删除访问(CRUD),而更高级的服务则使用领域驱动设计方法
和模式来管理业务复杂性。
代码结构
因为eShopOnContainers示例程序使用微服务,在其GitHub存储库中包含许多单独的项目文件。
除了独立的项目方案和可执行文件之外,各种服务还被设计为在独立的容器中运行。
下图显示了完整的Visual Studio解决方案,管理组织了各种不同的项目。
该代码被组织为支持不同的微服务,并且在每个微服务中,代码分为领域逻辑、基础设施以及用户界面/服务端点。
Ref
- https://docs.microsoft.com/en-us/dotnet/architecture/cloud-native/introduce-eshoponcontainers-reference-app
- https://github.com/dotnet-architecture/eShopOnContainers
.NET微服务最佳实践 eShopOnContainers的更多相关文章
- Kubernetes 微服务最佳实践
本文由个人笔记 ryan4yin/knowledge 整理而来 本文主要介绍我个人在使用 Kubernetes 的过程中,总结出的一套「Kubernetes 配置」,是我个人的「最佳实践」. 其中大部 ...
- RESTful服务最佳实践
本文主要读者 引言 REST是什么 统一接口 基于资源 通过表征来操作资源 自描述的信息 超媒体即应用状态引擎(HATEOAS) 无状态 可缓存 C-S架构 分层系统 按需编码(可选) REST快速提 ...
- 闲聊 “今日头条Go建千亿级微服务的实践”
背景 今天跟同事偶然看到<今日头条Go建千亿级微服务的实践>文章,故做了一些探讨,与大家分享下,也欢迎大家多多共同探讨!. 其他资料: 如何理解 Golang 中“不 ...
- 我们必须要知道的RESTful服务最佳实践
看过很多RESTful相关的文章总结,参齐不齐,结合工作中的使用,非常有必要归纳一下关于RESTful架构方式了,RESTful只是一种架构方式的约束,给出一种约定的标准,完全严格遵守RESTful标 ...
- python3和grpc的微服务探索实践
对于微服务的实践,一般都是基于Java和Golang的,博主最近研究了下基于Python的微服务实践,现在通过一个简单的服务来分析Python技术栈的微服务实践 技术栈:Python3 + grpc ...
- 基于 Docker 的微服务架构实践
本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ...
- 微服务架构实践 - 你只懂docker与spring boot就够了吗?
微服务架构实践 - 你只懂docker与spring boot就够了吗? 作者 浮云发发 已关注 2017.02.27 02:50* 字数 2613 阅读 2583评论 6喜欢 35赞赏 2 微服务并 ...
- NET Core 2.0 微服务跨平台实践
NET Core 2.0 微服务跨平台实践 相关博文: Ubuntu 简单安装 Docker Mac OS.Ubuntu 安装及使用 Consul Consul 服务注册与服务发现 Fabio 安装和 ...
- 今日头条Go建千亿级微服务的实践
今日头条Go建千亿级微服务的实践_36氪 http://36kr.com/p/5073181.html
随机推荐
- three.js cannon.js物理引擎之制作拥有物理特性的汽车
今天郭先生说一说使用cannon.js的车辆辅助类让我们的汽车模型拥有物理特性.效果图如下,在线案例请点击博客原文. 下面我们说一下今天要使用的两个类,并简单的看看他们的物理意义 1. Raycast ...
- 浅谈JavaScript异步编程
单线程模式 我们知道JS的执行环境是单线程的,是因为JS语言最早是运行在浏览器端的语言,目的是为了实现页面上的动态交互.实现动态交互的核心就是DOM操作,因此决定了JS必须是单线程模式工作.我们来假设 ...
- 最短路-Bellmm-ford算法
Bellmm-ford算法 解决什么样的问题 有边数限制的最短路,存在负权边,负环 概念 通俗的来讲就是:假设 1 号点到 n 号点是可达的,每一个点同时向指向的方向出发,更新相邻的点的最短距离,通过 ...
- Dockerfile,Dockerfile 参考文档
Dockerfile,Dockerfile 参考文档 1.Dockerfile 1.1Usage 1.2Format 1.3Parser directives 1.4escape 1.5Environ ...
- multiselect多选下拉框
具体实现 <input type="hidden" id="q_dueDay" name="q_dueDay" value=" ...
- Pytest(4)失败重跑插件pytest-rerunfailures
安装: pip3 install pytest-rerunfailures 重新运行所有失败用例 要重新运行所有测试失败的用例,请使用--reruns命令行选项,并指定要运行测试的最大次数: $ py ...
- Codeforces Round #656 (Div. 3) D. a-Good String
题目链接:https://codeforces.com/contest/1385/problem/D 题意 一个小写字母串称为 $c-good\ string$,如果至少满足以下条件之一: 字符串长度 ...
- hdu5643 King's Game(约瑟夫环+线段树)
Problem Description In order to remember history, King plans to play losephus problem in the parade ...
- Educational Codeforces Round 94 (Rated for Div. 2) String Similarity、RPG Protagonist、Binary String Reconstruction、Zigzags 思维
题目链接:String Similarity 题意: 首先题目定义了两个串的相似(串的构成是0.1),如果两个串存在对于一个下标k,它们的值一样,那么这两个串就相似 然后题目给你一个长度为2n-1的串 ...
- 牛客编程巅峰赛S2第3场 Tree VI (树,dfs)
题意:给你一个\(n\)个点的完全\(k\)叉树的先序遍历序列\(a\),还原这颗树并且求所有两个端点的异或和. 题解:用dfs在还原树的时候,把子节点和父亲节点的异或贡献给答案,对于每个节点,我们找 ...