自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

素履独行 | 元培的个人博客

素履以往,心之所向;一苇以航,直达远方。

  • 博客(323)
  • 资源 (3)
  • 收藏
  • 关注

原创 关于 Docker 容器配置信息的渐进式思考

作为一名软件工程师,不,或许应该叫做 YAML 工程师、Markdown 工程师、Dockerfile 工程师……等等,这绝非自谦,更多的是一种自嘲。毕竟,从入行的那一天开始,追求配置上的动态灵活,就如同思想一般刻进每个程序员的 DNA 里。可当你意识到,在这个世界上,提出主张的人和解决问题的人,并不是同一群人时,你或许会心头一紧,接着便是直呼上当,我甚至不能理解,为什么程序员提交完代码,还要像运维一样折腾各种配置文件。

2022-12-02 17:21:09 292 5

原创 在 Docker 容器内集成 Crontab 定时任务

有时候,我们需要在容器内执行某种定时任务。譬如,Kerberos客户端从KDC中获取到的TGT默认有效期为 10 个小时,一旦这个票据失效,我们将无法使用单点登录功能。此时,我们就需要一个定时任务来定时刷新票据。此前,博主为大家介绍过和这样的定时任务系统,而对于 Linux 来说,其内置的是比以上两种方案更加轻量级的一种方案,它可以定时地去执行Linux中的命令或者是脚本。对应到Kerberos的这个例子里面,从 KDC 申请一个新的票据,我们只需要使用kinit这个命令即可。

2022-11-29 08:56:49 722

原创 为你的服务器集成 LDAP 认证

回顾我这些年的工作经历,面向企业(2B)和面向用户(2C)的项目都曾接触过。我个人觉得,面向企业的项目更注重业务,参与决策的人数多、周期长,目的是为企业提供生产经营价值,如缩减成本、提升效率等等,而面向用户的项目更注重体验,参与决策的人数少、周期短,目的是为消费者提供更多的使用价值,本质上是为了圈揽用户和抢夺流量。我在参与这些项目的过程中发现,企业级应用的研发更注重与第三方软件如 SAP、金蝶、用友、ERP 等等的整合,因此,类似单点登录、数据同步这样的需求非常普遍。每当这个时候,我就不由地想起一位前辈。

2022-11-17 08:42:12 111

原创 视频是不能 P 的系列:使用 Dlib 实现人脸识别

本文是的第三篇。此前,我们已经可以通过或者实现对人脸的检测,并在此基础上实现了某种相对有趣的应用。譬如,利用人脸特征点提取面部轮廓并生成、将图片中的人脸批量替换为精神污染等等。当然,在真实的应用场景中,如果只是检测到人脸,那显然远远不够的,我们更希望识别出这张人脸是谁。此时,我们的思绪将会被再次拉回到人脸识别这个话题。在探索未知世界的过程中,博主发现自带的 LBPH 方法,即局部二值模式直方图方法,识别精度完全达不到预期效果。所以,博主最终选择了。

2022-11-03 16:07:12 276

原创 浅议分布式链路追踪与日志的整合

当然,微软的东西好像天生就是一种原罪,很多时候,你可能根本不会用这个听都没听说过的Acitivity,你可能更愿意使用自己生成的TraceId,在这种情况下,这个库就不再适用啦,因此,在最后的这点篇幅里,我想分享一下 Nlog 里自定义的 LayoutRenderer 的实现。提到这个话题的时候,我其实是蛮感慨的。

2022-10-19 10:02:16 180

原创 关于 Git 大文件上传这件小事

很多年后,当我在命令行中熟练地操作 Git 的时候,我总会不由地想起从前意气风发的自己。毕竟不知不觉间,三十岁的年龄已然被更年轻的人们嫌弃“苍老”,除却生理上不可逆转的自然衰老,更多的或许是一种心态上的衰老。以前,我是非常鄙夷在 Git 仓库里提交 Word 或者 Excel 文件这种行为的,甚至连理由都给得十分正当,即:这种文件不利于差异的对比和合并。后来,参与的项目越来越多,渐渐认识到 Markdown 始终是一种小众的格式,你没有办法要求所有人都去适应 Markdown。

2022-10-11 14:23:37 353

原创 .NET 进程内队列 Channel 的入门与应用

最近,博主为增加了协议的支持。这意味着,我们可以借助其全双工通信的特性,在一个连接请求内发送多条数据。FakeRPC 目前最大的遗憾是,建立在 HTTP 协议上而不是 TCP/IP 协议上。因此,考虑 WebSocket 协议,更多的是为了验证的可行性,以及为接下来的要支持的 TCP/IP 协议铺路。也许,你从未意识到这些概念间千丝万缕的联系,可如果我们把每一次 RPC 调用都理解为一组消息,你是不是就能更加深刻地理解 RPC 这个稍显古老的事物了呢?在编写 FakeRPC 的过程中,我使用了.NET。

2022-09-19 08:33:03 435

原创 使用 Fody 实现 .NET 的静态织入

在很长的一段时间里,我们的项目中一直使用这个基类来记录每个方法的日志。诚然,这个文件的存在,早已在冥冥之中暗示我,才是这座冰山下真正的墨西哥湾暖流。可惜,因为某种阴差阳错的巧合,譬如两者都使用了这个命名,这导致我过去一直以为我们使用的是。如果你是用过或者这些由出品的工具,你大概会听说过 PostSharp。不过,有趣的是,JetBrains 和 PostSharp 其实没有半毛钱的关系,两者唯一相似的地方,或许是它们都不姓微软😂。当我们谈论 PostSharp 的时候,我其实想说的是静态编织。

2022-08-25 09:18:14 288

原创 .NET Core + ELK 搭建可视化日志分析平台(下)

最近,我收到一位读者朋友的私信,问我 ELK 为什么没有下篇,道德感极强的我不得不坦诚相告,显然这一篇鸽了。这就是说,鸽子不单单会出现在吴宇森的电影里,只要你试图拖延或者逃避,你一样有鸽子可以放飞。话说回来,新冠疫情已然持续了三年,而这篇文章其实是我在新冠元年写下的。某年某月,彼时彼刻,立春过后紧接着是上元节,阳光已透过玻璃宣示着春天的到来,可在这一墙之隔的里里外外,仿佛是两个气候迥异的世界。记忆里那种每天都和消毒水、口罩打交道的日子,后来就变成了一种习以为常、甚至有一点唏嘘的常态化生活。......

2022-08-18 09:09:40 289

原创 聊一聊前端图片懒加载背后的故事

懒加载,即:LazyLoad,其核心全在于“懒”这个字眼上。虽然,这个字在生活中更多的是表示一种贬义,可正如气体有活性和惰性的区别,这里我们将其理解为延迟加载,或许会更合适一点,因为生活早已告诉我们,只要你打算偷懒,就一定会造成拖延。因此,懒加载其实就是一种通过延迟加载对网页性能进行优化的方法。一个典型的例子是,当网页中有滚动条的时候。此时,网页的一部分区域对于浏览器视窗而言是不可见的。如果将一次性将其加载出来,这其实是一种资源的浪费,因为你不确定用户是否有耐心浏览完整个网页。............

2022-08-05 09:54:06 6551 17

原创 支持外部链接跳转的 Vue Router 扩展实现

众所周知,Vue-Router 是 Vue 中重要的插件之一,特别是在当下流行的 单页面应用/SPA 中,这种感觉会越来越明显。此时,路由的作用就是根据 来决定要显示什么内容。诚然,页面这个概念在工程/模块中依然存在,可当你开始关注最终发布的产物时,你会发现本质上它只有一个页面。无论你选择 或者是 模式的路由,它都像是在同一张纸上反复写写画画,让你看起来觉得它有很多个不同的页面。回顾早期的前端项目,它往往会有多个不同的页面组成,我们是通过一个个的超链接来实现不同页面间的跳转。如今,这一切都已一去不复返

2022-07-13 16:02:00 621

原创 视频是不能 P 的系列:OpenCV 和 Dlib 实现表情包

2020 年年底的时候,博主曾心血来潮地开启过一个系列:视频是不能 P 的,其灵感则是来源于互联网上的一个梗,即:视频不能 P 所以是真的。不过,在一个美颜盛行的时代,辨别真伪实在是一件奢侈的事情,在各种深度学习框架光环的加持下,在视频中实现“改头换面”已然不再是新鲜事儿,AI 换脸风靡一时的背后,带来是关乎隐私和伦理的一系列问题,你越来越难以确认,屏幕对面的那个到底是不是真实的人类。古典小说《红楼梦》里的太虚幻境,其牌坊上有幅对联写道,“假作真时真亦假,无为有处有还无”。果然,在这个亦真亦幻的世界里,哪里

2022-07-11 16:40:20 558

原创 不得不说的 ASP.NET Core 集成测试

一直打算写一篇关于 ASP.NET Core 集成测试 的文章,因为一旦说起单元测试这个话题,多多少少会牵动我内心深处的理想主义色彩,虽然如今已然是程序员职业生涯的第七年,可在我看来依然有太多东西在原地打转。这一路跌跌撞撞地走过来,在不同的公司里,见识到了形态各异的研发流程,接触到了貌合神离的敏捷思想,阅读过了风格迥异的框架/架构。当时间节点来到 2022 年,惊觉 诞生业已 20 周年,虽然技术一直在不断向前发展,可我个人感觉,我们并没有在工程化上取得多少感人的进步,譬如单元测试、需求管理,这些听起来丝

2022-06-10 17:42:00 177

原创 再议 DDD 视角下的 EFCore 与 领域事件

在上家公司工作的时候,我们有部分业务是采用事件/消息驱动的形式。虽然,当时博主还没能用上诸如 Kafka、RabbitMQ 这样的消息中间件,可数据库 + Quartz 这样一个堪称“简陋”的组合,完全不影响博主对事件/消息驱动这种思想的启蒙。后来,在实现数据库审计、数据同步 等问题的时候,更是从实践层面上加深了这一印象。再后来,博主陆陆续续地接触了 DDD,其中 领域事件 的概念,第一次让博主意识到,原来事件可以和聚合根产生某种联系。退一步讲,即使你没有接触过 DDD,你只要听说过 MediatR 或者

2022-05-30 17:51:54 155

原创 Vue.js 前端项目容器化部署实践极简教程

大概一周前,在某个「微雨燕双飞」的下午,我正穿梭于熙熙攘攘的车流人海当中,而被雨水濯洗过的天空略显灰白,傍晚亮起的路灯恍惚中有种朝阳初升的错觉,内心更是涌现出一种「一蓑烟雨任平生」的豁达,我还没来得及给这场内心戏添油加醋,兴哥的电话突然打断了我的思绪。一番攀谈交心,我了解到,他想问的是前端容器化部署的相关问题。虽然,靠着兴哥的睿智、果敢,他第二天就想明白了整个事情的来龙去脉;但是,这完全不影响我水一篇博客出来。所以,今天这篇文章,我们来聊聊前端项目的容器化部署,并提供一个极简的实践教程,这里以 Vue.js

2022-05-18 13:10:14 738

原创 Python 图像风格化迁移助力画家梦想

本文内容走近风格化迁移体验风格化迁移自定义模型训练本文小结很多年前,星爷在《食神》这部电影里大彻大悟,「只要用心,人人都是食神」。从那个时候起,这句话就隐隐约约带着返璞归真、回归本心的意思。如同电影里描绘的餐饮行业一样,在资本市场的裹挟下,造神这项运动显得轻而易举,这个食神可以是史蒂·周,可以是唐牛,可以是任何人。因此,当穷困潦倒的史蒂·周,因为一碗叉烧饭而落泪的时候,我想,这或许是一种直面自我的顿悟。毕竟,电影里的星爷原本就不会做饭。《舌尖上的中国》带火了一句话,“高端的食材,往往只需要最简单的烹饪”,

2022-05-07 09:46:40 939 2

原创 在 Vue.js 中使用 Mock.js 实现接口模拟

本文内容问题现状改进思路SwaggerMock.js登高望远最近这段时间,我一直在参与一个前端项目。每当我从庸碌的生活中赢得片刻喘息的时候,我不由得感慨,在程序员朴实无华且枯燥的职业生涯里,写自己喜欢的代码的机会少之又少,写别人喜欢的代码的机会俯拾皆是,更多的时候像是“为他人作嫁衣裳”。古人云,“遍身罗绮者,不是养蚕人”,当每天面对着被改得面目全非的代码的时候,内心固然早已波澜不惊、宠辱偕忘,可还是会期待美好的事情发生,因为从工程化的角度而言,每天都在思考的事情,其实就是怎么样做会更好一点。过去这些年里,

2022-04-17 11:53:16 2340

原创 利用 ASP.NET Core 中的标头传播实现分布式链路跟踪

在此之前,我曾写过一篇博客,《Envoy 集成 Jaeger 实现分布式链路跟踪》,主要分享了 ASP.NET Core 应用如何结合 Envoy 和 Jeager 来实现分布式链路跟踪,其核心思想是生成一个全局唯一的x-request-id,并在不同的微服务或者子系统中传播该信息。进而,可以使得相关的信息像一条线上的珠子一样串联起来。在此基础上,社区主导并产生了 OpenTracing 规范,在这个 规范 中,一个 Trace,即调用链,是由多个 Span 组成的有向无环图,而每个 Span 则可以含有多

2022-04-08 15:16:43 481

原创 利用 gRPC 实现文件的上传与下载

本文内容定义 Protobuf实现上传实现下载现实挺骨感本文小结几天前,某人同我抱怨,说是某接口无法正常工作,坦白地讲,这只是程序员生命里再枯燥不过的日常,因为无论“好”或者“不好”,他们都要努力回应来自灵魂深处的那声“为什么”。所以,善待程序员的方式之一,就是不要总问他“为什么”,因为他已经听了太多的“为什么”。经过一番攀谈交心,我了解到是模型绑定出了问题。原来,他需要实现一个导出/下载功能,因为他不确定能否通过 Envoy 代理来自 gRPC 的文件流,故而,他选择了传统的 Web API,结果不曾想

2022-03-22 14:27:30 4449

原创 七种武器:延迟队列的原理和实现总结

“这是最好的时代,这是最坏的时代”,英国作家查尔斯·狄更斯在两百多年前写下的这句话,如果从辩证的角度来看,它或许可以适用于任何一个时代。我们生活在一个怎样的时代呢?我想,或许是一个矛盾的时代。因为,有时它让你对未来有无限的期待,有时它又会让你陷入无尽的绝望,特别是当集体和个人的命运形成强烈反差的时候,当实用主义、精致利己主义开始盛行的时候,我们偶尔会感慨罗曼蒂克的消亡、怀念从前慢、追忆芳华,可下一秒就被卷入到同时间赛跑的庸庸碌碌当中。生活节奏越来越快,人们越来越追求实时、速度、效率,选择当下的同时,意味着选

2022-03-13 09:47:06 433

原创 gRPC 流式传输极简入门指南

本文内容从 HTTP/2 说起gRPC 中的流式传输客户端流服务器端流双向流本文小结最近一直在研究 gRPC 的 ServerReflection,顾名思义,这是 gRPC 里提供的反射接口,当你需要获取某个接口的描述信息,或者是希望动态调用 gRPC 的时候,这一切就会变得非常有用,如果你经常使用 gRPC UI 这款工具来调试 gRPC 接口,那么,你一定会注意到一件事情,即它要求服务端必须支持 ServerReflection API,而这一点在 ASP.NET Core 中已经得到支持,对此感兴趣

2022-02-28 12:32:07 456

原创 Envoy 集成 Jaeger 实现分布式链路追踪

本文内容分布式跟踪Envoy & Jaeger第一个实例本文小结当我们的应用架构,从单体系统演变为微服务时,一个永远不可能回避的现实是,业务逻辑会被拆分到不同的服务中。因此,微服务实际就是不同服务间的互相请求和调用。更重要的是,随着容器/虚拟化技术的发展,传统的物理服务器开始淡出我们的视野,软件被大量地部署在云服务器或者虚拟资源上。在这种情况下,分布式环境中的运维和诊断变得越来越复杂。如果按照功能来划分,目前主要有 Logging、Metrics 和 Tracing 三个方向,如下图所示,可以注意

2022-01-16 11:44:40 251

原创 浅议非典型 Web 应用场景下的身份认证

本文内容楔子gRPCSignalRKafka本文小结据我所知,软件行业,向来是充满着鄙视链的,人们时常会因为语言、框架、范式、架构等等问题而争执不休。不必说 PHP 到底是不是世界上最好的语言,不必说原生与 Web 到底哪一个真正代表着未来,更不必说前端与后端到底哪一个更有技术含量,单单一个 C++ 的版本,1998 与 2011 之间仿佛隔了一个世纪。我真傻,我单知道人们会因为 GCC 和 VC++ 而分庭抗礼多年,却不知道人们还会因为大括号换行、Tab 还是空格、CRLF 还是 CR……诸如此类的问题

2021-12-31 11:39:16 203 2

原创 gRPC 借助 Any 类型实现接口的泛化调用

本文内容Protobuf 里的 Any 类型在 .NET 中使用 Any 类型本文小结我发现,人们非常喜欢在一件事情上反复横跳。譬如,以编程语言为例,人们喜欢静态的、强类型语言的严谨和安全,可难免会羡慕动态的、弱类型语言的自由和灵活。于是,在过去的这些年里,我们注意到,.NET 的世界里出现了 dynamic 类型,JavaScript 的世界里出现了 TypeScript,甚至连 Python 都开始支持类型标注。这种动与静、强与弱的角逐,隐隐然有种太极圆转、轮回不绝的感觉。果然,“城外的人想冲进去,城

2021-12-16 12:00:08 1520

原创 分布式丛林探险系列之 Redis 集群模式

本文内容Redis 集群概述一致性哈希算法Redis 哈希槽Redis 集群实战本文小结时间终于来到了十二月,据说,《黑客帝国 4:矩阵重生》 将于本月在北美上映,正如同它的片名一样,黑客帝国系列在沉寂了十八年后,终于等来了一次矩阵重生的机会,不可不谓“有生之年”、“爷青回”。提及黑客帝国系列,这是一部公认的、具有划时代意义的科幻电影,除了精彩绝伦的打斗特效,最为影迷所津津乐道的,当属对于人和机器的关系这种颇具哲学意味的问题的探讨。在第二部中,The One 的部分代码被融合到了 Smith 身上,而这使

2021-12-09 11:29:53 314

原创 分布式丛林探险系列之 Redis 主从复制模式

如果说,单体架构系统是坐在家里悠闲地喝着下午茶,那么,毫无疑问,分布式系统将会是一场永远充满惊喜的丛林冒险。从踏上这条旅程的那一刻起,此间种种都被打上分布式的烙印,譬如分布式锁、分布式事务、分布式存储、分布式配置等等,这些词汇拆开来看,“似曾相识燕归来”,每一个我都认识,而一旦放到分布式的场景中,一切就突然变得陌生起来,从过去的经典三层架构、到时下流行的微服务、再到更为前沿的服务网格,一路跌跌撞撞地走过来,大概只有眼花缭乱和目不暇接了。前段时间在做 FakeRpc,这是一个基于 ASP.NET Core 的

2021-11-18 15:14:03 249

原创 通过 Python 预测 2021 年双十一交易额

本文内容思路说明实现过程本文小结突然间,十月以某种始料未及的方式结束了,也许是因为今年雨水变多的缘故,总觉得这个秋天过去得平平无奇,仿佛只有观音禅寺的满地银杏叶儿,真正地宣布着秋天的到来,直到看见朋友在朋友圈里借景抒怀,『 霜叶红于二月花 』,秋天终于没能迁就我的一厢情愿,我确信她真的来了。当然,秋天不单单会带来这些诗情画意的东西,更多的时候我们听到的是双十一、双十二,这些曾经由光棍节而催生出的营销活动,在过去的十多年间渐渐成为了一种文化现象,虽然我们的法定节日永远都只有那么几天,可这并不妨碍我们自己创造

2021-10-27 14:23:19 326

原创 gRPC 搭配 Swagger 实现微服务文档化

有人说,程序员最讨厌两件事情,一件是写文档,一件是别人不写文档,这充分展现了人类双标的本质,所谓的“严于律人”、“宽于律己”就是在说这件事情。虽然这种听来有点自私的想法,是生物自然选择的结果,可一旦人类的大脑皮层在进化过程中产生了“理性”,就会试图去纠正这种来自动物世界的阴暗面。所以,人类双标的本质,大概还是因为这个行为本身就有种超越规则、凌驾于众人之上的感觉,毕竟每个人生来就习惯这种使用特权的感觉。回到写文档这个话题,时下流行的微服务架构,最为显著的一个特点是:仓库多、服务多、接口多,此时,接口文档的重要

2021-09-29 13:43:05 322

原创 SSLTLS加密传输与数字证书的前世今生

Hi,大家好,我是飞鸿踏雪,欢迎大家关注我的博客。近来,博主经历了一次服务器迁移,本以为有 Docker-Compose 加持,一切应该会非常顺利,没想到最终还是在证书上栽了跟头,因为它的证书是和IP地址绑定的。对,你没听错,这个世界上还真就有这么别扭的设定,尤其是你折腾了一整天,发现你需要到一个 CA 服务器上去申请证书的时候,那种绝望你晓得吧?数字证书、HTTPS、SSL/TLS、加密……无数的词汇在脑海中席卷而来,这都是些啥啊?为了解答这些困惑,经历了写字、画图、查资料的无数次轮回,终于在周末两天淅淅

2021-09-09 15:01:27 156

原创 使用 Python 自动识别防疫二维码

这个月月初的时候,朋友兴奋地和我描述着他的计划——准备带孩子到宁夏自驾游。朋友感慨道,“小孩只在书本上见过黄河、见过沙漠,这样的人生多少有一点遗憾”,可正如新冠病毒会变异为德尔塔一样,生活里唯一不变的变化本身,局部地区疫情卷土重来,朋友为了孩子的健康着想,不得不取消这次计划,因为他原本就想去宁夏看看的。回想过去这一年多,口罩和二维码,是每天打交道最多的东西。也许,这会成为未来几年里的常态。在西安,不管是坐公交还是地铁,都会有人去检查防疫二维码,甚至由此而创造了不少的工作岗位。每次看到那些年轻人,我都有种失落

2021-08-20 15:56:56 2134

原创 你不可不知的容器编排进阶技巧

在团队内推广Docker Compose有段时间啦,值得庆幸的是,最终落地效果还不错,因为说到底,大家都不大喜欢,那一长串复杂而枯燥的命令行参数。对我而言,最为重要的一点,团队内使用的技术变得更加透明化、标准化,因为每个微服务的配置信息都写在docker-compose.yml文件中,任何人都可以快速地构建出一套可用的服务,而不是每次都要去找具体的某一个人。我想说,这其实是一个信息流如何在团队内流动的问题。也许,我们有文档或者Wiki,可新人能不能快速融入其中,这才是检验信息流是否流动的唯一标准。就这样,团

2021-08-16 20:20:25 203

原创 ASP.NET Core 搭载 Envoy 实现 gRPC 服务代理

在构建以 gRPC 为核心的微服务架构的过程中,博主曾经写过一篇名为 ASP.NET Core gRPC 打通前端世界的尝试 的文章,主要是希望打通 gRPC 和 前端这样两个异次元世界,因为无论我们构建出怎样高大上的微服务架构,最终落地的时候,我们还是要面对当下前后端分离的浪潮。所以,在那篇文章中,博主向大家介绍过 gRPC-Web 、gRPC-Gateway 、封装 API 、编写中间件 这样四种方案。我个人当时更喜欢编写中间件这种方案,甚至后来博主进一步实现了 gRPC 的 “扫描” 功能。当时,博主

2021-08-08 19:59:50 179

原创 再话AOP,从简化缓存操作说起

AOP,即:面向切面编程,关于这个概念,博主其实写过好几篇博客啦!从这个概念,我们可以引申出诸如代理模式、动态代理、装饰器模式、过滤器、拦截器等等相互关联的概念。从实现方式上而言,微软官方的 .NET Remoting 提供了真实代理和透明代理的支持,我们熟悉的 WebService 和 WCF 均和这项技术息息相关,作为最早的分布式 RPC 解决方案,其本身更是与客户端的动态代理密不可分。或许,各位曾经接触过 Unity、Castle、AspectCore、PostSharp 等等这些支持 AOP 特性的

2021-08-04 13:36:59 130

原创 ASP.NET Core 搭载 Envoy 实现微服务身份认证(JWT)

在构建以 gRPC 为核心的微服务架构的过程中,得益于 Envoy 对 gRPC 的“一等公民”支持,我们可以在过滤器中对gRPC服务进行转码,进而可以像调用 Web API 一样去调用一个 gRPC 服务。通常情况下, RPC 会作为微服务间内部通信的信使,例如,Dubbo、Thrift、gRPC、WCF 等等更多是应用在对内通信上。所以,一旦我们通过 Envoy 将这些 gRPC 服务暴露出来,其性质就会从对内通信变为对外通信。我们知道,对内和对外的接口,无论是安全性还是规范性,都有着相当大的区别。博主

2021-07-24 18:15:00 339

原创 ASP.NET Core 搭载 Envoy 实现微服务的可视化监控

在构建微服务架构的过程中,我们会接触到服务划分、服务编写以及服务治理这一系列问题。其中,服务治理是工作量最密集的一个环节,无论是服务发现、配置中心、故障转移、负载均衡、健康检查……等等,这一切的一切,本质上都是为了更好地对服务进行管理,尤其是当我们面对数量越来越庞大、结构越来越复杂的集群化环境的时候,我们需要一种科学、合理的管理手段。博主在上一家公司工作的时候,每次一出现线上故障,研发都要第一时间对问题进行排查和处理,而当时的运维团队,对于微服务的监控止步于内存和CPU,无法系统而全面的掌握微服务的运行情况

2021-07-12 13:19:41 379

原创 ASP.NET Core 搭载 Envoy 实现微服务的负载均衡

如果说,我们一定要找出一个词来形容这纷繁复杂的世界,我希望它会是熵。有人说,熵增定律是宇宙中最绝望的定律,所谓熵,即是指事物混乱或者无序的程度。在一个孤立系统下,熵是不断在增加的,当熵达到最大值时,系统就会出现严重混乱,直至最终走向死亡。从某种意义上来讲,它揭示了事物结构衰退的必然性,甚至于我们的人生,本来就是一场对抗熵增的旅程。熵增的不可逆性,正如时光无法倒流一般,古人说,“覆水难收”正是这个道理。同样地,当我们开始讨论微服务的划分/编写/治理的时候,当我们使用服务网格来定义微服务架构的时候……我们是否有

2021-07-06 08:39:21 171

原创 ASP.NET Core 搭载 Envoy 实现微服务的反向代理

本文内容走近 EnvoyEnvoy配置文件侦听器(Listeners)过滤器(Filters)集群(Clusters)负载均衡(Load Assignment)管理(Admin)服务编排本文小结参考文档第一次接触到Envoy,其实是在微软的示例项目 eShopOnContainers 。当时,博主并没有对它做深入的探索,直到最近,需要在一个项目中用到Envoy,终于决定花点时间来学习一下相关内容。所以,接下来这几篇博客,大体上会记录我学习Envoy的过程。考虑到Envoy的配置项特别多,在写作过程中难免会

2021-07-02 16:45:57 270

原创 ASP.NET Core gRPC 打通前端世界的尝试

本文内容gRPC-WebgRPC-Gateway封装 Web API编写中间件本文小结在构建以 gRPC 为核心的微服务架构的过程中,我们逐渐接触到了 gRPC 的过滤器、健康检查、重试等方面的内容。虽然, Protocol Buffers 搭配 HTTP/2 ,在整个传输层上带来了显著的性能提升,可当这套微服务方案面对前后端分离的浪潮时,我们能明显地有点“水土不服”。其实,如果单单是以 Protocol Buffers 来作为 HTTP 通信的载体,通过 protobuf.js 就可以实现前端的二进制化

2021-06-22 15:27:41 196

原创 EFCore 实体命名约定库:EFCore.NamingConventions

引言在软件开发过程中,数据库永远都是绕不开的一个话题。有时候,我们甚至会因此而获得一个名字——“CURD Boy”。虽然不过是朴实无华的“增删查改”,可隐隐然早已分出了无数的流派。在这些不同的流派中,有的人坚持“我手写我心”,认为手写SQL才是真正的王道,没有读过/写过成百上千行的存储过程,便不足以谈论程序员的人生。而有的人喜欢ORM的清晰、整洁,认为数据库和面向对象存在着天然抗阻,ORM更有利于推进DDD和微服务的落地。相信大家都听说过Java里的SSH框架,从Hibernate到Mybatis再到Sp

2021-06-18 20:32:44 281

原创 ASP.NET Core gRPC 集成 Polly 实现优雅重试

本文内容引言基于 gRPC RetryPolicy基于 HttpClientFactory基于 gRPC 拦截器基于 CallInvoker本文小结在上一篇 博客 中,我们一起探索和实现了gRPC的健康检查。从服务治理的角度来看,健康检查保证的是被调用的服务“健康”或者“可用”。可即使如此,我们依然会遇到,因为网络不稳定等原因而造成的服务调用失败的情形,就如同我们赖以生存的这个真实世界,本身就充满了各种不确定的因素一样,“世间唯一不变的只有变化本身”。不管是面对不稳定的服务,还是面对不确定的人生,任何时候

2021-06-10 10:13:06 232 4

SQLDeveloper_4.0.3.16.rar

SQLDeveloper_4.0.3.16, 解压即用,无需配置,适合Oracle开发人员使用,虽然我不喜欢Oracle

2021-08-18

2DToolKIit插件

用于Unity3D的2DToolKIit插件,可以帮助你快速开发2D游戏

2014-03-19

NGif动画编码/解码库

一个可以解码和编码GIF动画的类库,可以生成动画和解码动画,你值得拥有!

2014-03-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除