Spiga

2024年9月的文章归档

云原生电商微服务实战3:Asprise和Dapr集成

2024-09-28 13:27:01

摘要:一、云原生介绍 概念 什么是云原生:云原生是一种软件开发的方法论,通俗来说就是在云计算环境中构建和运行应用程序 云计算的特点:弹性、可扩展、高可用 云原生关键点: 容器化 微服务 动态管理 CI/CD 弹性(容错机制) 服务网格 容器编排工具 监控平台(指标、链路、日志) 云原生开发与微服务开发 理念(云原生:云计算为基础;传统:固定的硬件) 架构(云原生:微服务、Serverless;传统:单机架构) 开发流程(云原生:CI/CD;传统:瀑布模型(没有自动化)) 基础设施(云原生:通过代码管理依赖资源、自动配置;传统:事先准备、手动配置) 服务发现通信(云原生:环境中自带服务发现;传统:Consul、自己实现、提前准备、依赖硬编码、配置文件) 监控和日志(云原生:环境中准备好了各种监控、日志、链路追踪;传统:过于依赖外部组件) 资源利用率(云原生:动态调整资源;传统:资源分配不灵活) 开发环境和生产环境 云原生概要已经提出很久了,k8s可以说就是上就是一个云原生环境。 我在2019年的时候就开始带团队成员来是公司的微服务转型,那个时候都是自己手撸k8s环境,各种中间件集群也是自己搭建的。 那个时候云原生环境确实不好,虽然各大云平台都提供直接的paas产品,但很多收费都较贵,最终还是自己搭建。 更重要的时候本地开发时虽然安装的docker版本,提供了mini k8s环境,但是开发和部署的环境还是不一样的。 二、Asprise介绍 如果能有一个让开发和部署都是云原生的,开发的时候不需要自己去安装mysql,redis;同时开发的时候也不需要知道最终部署的是阿里云,还是微软云。只要开发环境是基于云原生的,开发环境拥有云原生的特性,比如监控、日志、链路追踪。部署的时候只需要提供对应的云产品的产品就能让系统跑起来,这种跑起来的方式,可能就是提供一个连接字符串就可以了。如果有这样的环境,那云原生开发将变得简单很多。 对的,这就是我们当前的明星出场的时候了。 .NET Aspire是NET 8.0 LTS提出的一套开发工具,它的作用就是构建和运行云原生应用程序。 特点: Dashboard - 中心化的应用监控和探查:F5 启动 .NET Aspire可显示服务的统…… 阅读全文

云原生电商微服务实战2:用户微服务

2024-09-14 11:51:22

摘要:上一篇我们介绍了本项目的基础架构,实际上共享项目里面还有很多内容并没有介绍。这是因为在没有具体业务前,光谈抽象类并不是很好理解,因此除了领域模型的规范和通用EFCore的实现外,其他的通用共享类都放到具体的业务中讲。 接下来,本次的出题就开始直接进入业务实现了,首先我们来谈第一个微服务,用户微服务。 一、用户服务领域层 因为我们整个项目采用的是基于洋葱模型的整洁架构,结合DDD的经典分层,我们的微服务基本上都分层四层。 ps:因为是培训项目,实际业务并不一定每个微服务都要采用一样的分层,实际开发中如果是小的,业务相对稳定微服务哪怕直接用文件夹来区分层次也是可以了。 在services文件夹中创建user文件夹,再创建DDM.DHT.UserService.Core类库项目,可以讲项目默认命名空间改成DDM.DHT.UserService。 接着创建Entities文件夹,再创建User.cs类,代码如下: public class User : BaseAuditEntity, IAggregateRoot { protected User() { } public User(string loginId, string phone) { LoginId = loginId; Phone = phone; Random random = new Random(); Name = Phone.Substring(0, Phone.Length - 4) + _ + random.Next(100, 999); UseAble = true; Salt = loginId.MD5EncodingOnly(); PasswordHash = 123456.MD5EncodingWithSalt(Salt); // default password is 123456 } public string LoginId { get; private set; } = null!; public string Name { get; private se…… 阅读全文

云原生电商微服务实战1:搭建基础框架

2024-09-07 22:29:37

摘要: 一直以来想专心写一个基于云原生的微服务案例,但总角色要写的内容太多了。电商案例本身并不会太难,而要搭建好一整套云原生和微服务的基础设施,并不是一项轻松的工作。随着.Net Asprise的推出,再集成Dapr,开发和生产几乎可以保持一样的环境了。这让我惊喜,曾经我们手动搭建k8s,手动配置集群以及可以成为历史,我们需要的就是使用这些工具,重新把核心回归到业务上来。 ​ 正好新公司也是做电商业务的,于是我终于决定开始写一套云原生电商微服务的案例。一方面可以学习Asprise和Dapr的相关知识,也是一次属性电商核心业务的机会。 ​ 这次的内容会写得比较细,目标是把这个项目当成一个培训项目来写。让不了解云原生、不了解微服务和不了解电商业务的人,也能看得懂该项目。 一、DDD DDD相关的文章以及很多了,我在几年前也写过一个DDD的学习系列,本文就只是做个总结,毕竟微服务是离不开DDD的。 解决什么问题 问题域 需求分析 分析理解复杂业务领域问题 准确反映业务语言 领域分析概念 领域 子域 核心域、通用域和支撑域 限界上下文 领域建模概念 实体与值对象 聚合与聚合根 领域事件 领域服务 仓储 工作单元模式 规约 应用服务 防腐层 领域驱动设计 CQRS: 命令与查询分离,作为一种战术办法,是实现DDD建模领域的最佳途径之一。 充血模型: 让模型自带业务逻辑,业务属性的改变只有模型自身可以操作。 二、整洁架构 核心原则 独立于框架:整洁架构的系统核心业务逻辑不依赖于具体的软件框架,业务逻辑部分都能够独立运行。这样在框架更新或者替换时,对核心业务的影响最小。 可测试性:架构设计使得业务规则可以很方便地被测试。因为业务逻辑是独立于外部组件(如数据库、用户界面等)的,所以可以使用单元测试来验证业务规则的正确性。比如,在一个电商系统中,“计算商品折扣”的业务规则可以通过提供模拟的商品价格数据来进行单元测试,而不需要真正地连接数据库或者启动整个用户界面。 独立于UI(用户界面):业务逻辑与用户界面相互独立。这意味着可以方便地替换用户界面,比如从一个命令行界面转换为图形界面,或者从Web界面转换为移动应用界面,而不会影响到业务逻辑。 独立于数据库:系统的核心不依赖于数据库的类型…… 阅读全文