再议 DDD 视角下的 EFCore 与 领域事件
再议 DDD 视角下的 EFCore 与 领域事件 在这篇文章中,作者分享了在工作中使用事件/消息驱动业务的经历和思考。作者回顾了过去在实现数据库审计、数据同步等问题时的经历,并逐步接触了领域驱动设计(DDD)中的领域事件概念。文章重点讨论了如何通过在实体类中添加领域事件属性,并在DbContext的SaveChanges方法中分发事件来实现延迟执行消息发布的方案。作者还探讨了使用EntityFramework的SaveChanges Events特性和拦截器来处理领域事件的方法。最后,作者分享了对软件开发和业务模式的反思,以及对DDD在当前业务中的适用性的疑问。文章涵盖了事件驱动业务模式、DDD理念、数据库审计、消息队列等内容,展现了作者在技术实践和思考中的成长与思考。
Python 图像风格化迁移助力画家梦想
Python 图像风格化迁移助力画家梦想 这篇文章探讨了风格化迁移的概念,并以图像风格化迁移为例进行讨论。文章提及了人人都是食神、产品经理、艺术家的观点,引出了图像风格化迁移的背景和意义。详细介绍了风格化迁移的定义、实现原理以及算法支撑,包括神经网络在图像风格化迁移中的应用。最后,作者分享了自定义模型训练的尝试和结果,并通过图像展示了传统水墨画风格迁移的效果。文章结尾以对艺术与技术的思考和对创作的热情做出总结。
利用 ASP.NET Core 中的标头传播实现分布式链路追踪
利用 ASP.NET Core 中的标头传播实现分布式链路追踪 作者介绍了一种新的 ASP.NET Core 集成方案,通过安装 `Microsoft.AspNetCore.HeaderPropagation` 包,使用 `HeaderPropagation` 中间件,避免了以往在不同微服务或子系统中显式传递 HTTP 请求头的问题。在 `Startup` 配置中添加请求头,通过 `AddHttpClient` 配置 `HttpClient` ,并在请求管道中加入 `UseHeaderPropagation` 中间件,以自动传播请求头。这种方案不仅适用于分布式链路追踪,如 Envoy 和 Jaegers,还适用于认证等其他场景,提高了代码的整洁与可维护性。
利用 gRPC 实现文件的上传与下载
利用 gRPC 实现文件的上传与下载 某人遇到问题,模型绑定出错导致无法实现导出/下载功能,选择传统Web API解决。文章介绍利用gRPC实现文件上传和下载,定义了Protobuf,展示了上传和下载的实现,指出基于gRPC的上传下载无法直接在浏览器环境下使用,提及Envoy和gRPC-Web的方向。最后提到用传统Web API包装作为替代方案。文章探讨技术实现背后的无解和接受命运的态度,展示了对技术和人生的思考。
七种武器:延迟队列的原理和实现总结
七种武器:延迟队列的原理和实现总结 本文探讨了延迟队列的概念和实现方式,从DelayQueue介绍到具体的实现方式包括Java的DelayQueue、.NET中的PriorityQueue、基于Redis的Key过期机制和ZSet结构、使用Quartz实现延时任务、以及基于RabbitMQ实现延迟队列等。文章指出延迟队列适用于需要延迟执行的场合,提到延时满足是一种高级快乐,有助于培养和付出。各种实现方式都展示了不同的延迟队列应用场景和技术实现,为读者深入了解延迟队列提供了丰富的参考和思路。
gRPC 流式传输极简入门指南
gRPC 流式传输极简入门指南 最近一直在研究 gRPC 的 ServerReflection,这是 gRPC 中提供的反射接口,对于动态调用 gRPC 接口非常有用。作者发现 ServerReflection API 使用了 gRPC 双向流的方式进行交互,类似于服务器推送技术如 WebSocket 和 Server-Sent Events。文章介绍了流式传输的概念,包括 HTTP/2 中的多路复用特性以及 gRPC 中的流式传输类型:客户端流、服务器端流和双向流。具体展示了这些流式传输类型在 gRPC 中的实现方式和对应的代码示例。最后,作者分享了对 gRPC 流式传输的兴趣和探索,强调了在工作中遇到的挑战和探索的乐趣。
Envoy 集成 Jaeger 实现分布式链路追踪
Envoy 集成 Jaeger 实现分布式链路追踪 当将应用架构从单体系统迁移到微服务时,业务逻辑被拆分到不同服务中,导致微服务实际上是不同服务间的互相请求和调用。随着容器/虚拟化技术的发展,传统物理服务器被云服务器或虚拟资源取代,使得分布式环境中的运维和诊断变得复杂。主要的分布式追踪方向有 Logging、Metrics 和 Tracing,其中 Tracing 涉及 Envoy、Jaeger 和 .NET Core 的实现。分布式追踪系统基于 Dapper 论文,如 Zipkin、Jeager、Skywalking、LightStep 等系统,采用代码埋点、数据存储和查询展示三个步骤。OpenTracing 规范定义了 Trace 由多个 Span 组成,而每个 Span 包含多个 Tag。Envoy 通过 Zipkin 或 Jeager 支持外部追踪服务,实现分布式追踪。通过 Envoy 的 Gateway 模式实现请求追踪,结合 ASP.NETCore 和 Jeager 实现示例,展示服务调用链的追踪和分析。
浅议非典型 Web 应用场景下的身份认证
浅议非典型 Web 应用场景下的身份认证 在软件行业,存在针对语言、框架、范式、架构等问题的鄙视链。作者提到了编程领域充满着宗教原旨的意味,回顾了自己被轻视的经历。文中探讨了非典型 Web 应用场景下的身份认证,涵盖了 gRPC、SignalR 和 Kafka。针对 gRPC,介绍了身份认证的解决方案;对于 SignalR,讨论了身份认证的需求和解决方案;对于 Kafka,探讨了令牌传递、用户信息获取和处理消息的方式。最后,作者呼吁准备好面对非典型场景,并思考在后疫情时代的应对方式。
gRPC 借助 Any 类型实现接口的泛化调用
gRPC 借助 Any 类型实现接口的泛化调用 在编程中,人们常常在动态与静态、强类型与弱类型等概念上反复权衡。近年来,出现了动态类型如 .NET 中的 dynamic 类型、TypeScript 替代 JavaScript 、Python 增加类型标注等趋势。文章介绍了在 Protobuf 中引入 Any 类型的必要性和用法,以实现泛型接口描述。Any 类型简单包含 type_url 和 value 字段,能够实现不同消息之间的相互转换。在 .NET 中使用 Any 类型时,可以通过 Pack() 、Unpack<T>() 等方法实现消息间的转换。最后,通过自定义 MyAny 类型扩展方法,实现了更灵活的类型处理,探讨了 Protobuf 在泛型场景下的应用,提倡通过 Any 类型构建通用查询接口。文章强调了在动态与静态、强与弱之间取舍的灵活性,并探讨了在实际开发中如何应用 Any 类型处理泛型情景。
分布式丛林探险系列之 Redis 集群模式
分布式丛林探险系列之 Redis 集群模式 《黑客帝国4:矩阵重生》即将在北美上映,标志着黑客帝国系列的复活。文章讨论了黑客帝国系列对于人和机器关系的哲学探讨,以及影响后续电影的打斗桥段。随后详细介绍了Redis集群模式中的概念、一致性哈希算法和Redis哈希槽,解释了集群搭建过程和故障转移机制。总结指出Redis集群本质为一种服务器Sharding技术,通过哈希槽管理数据分片,节点间通过TCP通信并实现连接重定向,故障转移则由投票机制决定。文章深入浅出地阐述了这些复杂概念,展示了技术世界中的民主和科学做法。
分布式丛林探险系列之 Redis 主从复制模式
分布式丛林探险系列之 Redis 主从复制模式 本文介绍了Redis主从复制的概念及实战应用。主从复制可提供数据冗余、故障恢复、负载均衡和高可用等好处。Redis的主从复制可分为全量复制和部分复制,通过Docker-Compose搭建了一主两从的复制方案。文章强调了实践的重要性,指出在实际应用中可能会遇到延迟、数据过期、故障切换等问题,需要进一步探索和总结。
gRPC 搭配 Swagger 实现微服务文档化
gRPC 搭配 Swagger 实现微服务文档化 本文探讨了程序员对文档编写的矛盾态度,以及在微服务架构中接口文档的重要性。介绍了使用 protoc-gen-doc 方案生成 Protobuf 格式的 gRPC 服务文档,并提供了 Docker 部署示例。另外,还介绍了整合 Swagger 的方案,通过 GrpcSwaggerProvider 来实现 gRPC 与 Swagger 的结合,使得查阅和调试 gRPC 接口更加便捷。最后,作者分享了对服务治理中接口文档重要性的思考,并总结了两种针对 gRPC 的服务文档化方案的优缺点。
SSL/TLS 加密传输与数字证书的前世今生
SSL/TLS 加密传输与数字证书的前世今生 本文详细介绍了数字证书、HTTPS协议和加密技术之间的联系,讨论了证书的种类、CA的作用以及数字证书的申请过程。通过分析SSL/TLS加密、对称加密和非对称加密的关系,以及证书链的概念,阐述了数字证书的重要性和应用。此外,还提供了关于如何在不同环境中配置证书的实际操作步骤,包括ASP.NET Core、Envoy和Nginx的配置方法。文章通过实例和命令展示了自签名证书和CA证书的生成过程,并强调了证书的扩展名和格式转换的重要性。整体内容涵盖了数字证书的理论知识和实际应用,为读者深入了解和使用数字证书提供了全面的指导和参考。
使用 Python 自动识别防疫健康码
使用 Python 自动识别防疫健康码 本文讨论了朋友因疫情取消自驾游计划,作者尝试利用Python编写程序自动识别防疫二维码的原理和实现过程。通过颜色识别、二维码检测、色彩检测以及OCR识别等步骤来实现。作者展示了处理防疫二维码的图块检测、二维码检测、色彩检测、OCR识别,并展示了通过摄像头检测防疫二维码的成品。文章反思了基础性研究的现状,探讨了科学家与普通人在选择挣快钱还是挣慢钱的问题。
你不可不知的容器编排进阶技巧
你不可不知的容器编排进阶技巧 本文介绍了在团队内推广`Docker Compose`时遇到的容器启动顺序、健康检查和网络模式等问题。针对容器启动顺序,讨论了使用`depends_on`的局限性,并介绍了通过等待目标服务准备就绪的方式来控制容器启动顺序。在健康检查方面,提及了`HEALTHCHECK`选项的运用以及自定义健康检查脚本的使用。对于容器的网络模式,列举了主机、网桥、无网络和容器模式的特点,以及如何在`Docker-Compose`中自定义网络。文章还总结了使用`wait-for-it`和结合`HEALTHCHECK`与`depends_on`来解决容器启动顺序问题的方法,以及对网络模式的选择建议。