跳转至

札记

关于非侵入式架构

在工作中,很多项目并不像我们学习时所遇到的那样,不论是大型项目还是小型项目,它们都有同样令人头疼的问题——技术债务。

我们不能逃避,但是需求不会等着我们把这些问题解决之后再继续跟进。我们需要更加优雅的解决方案,这就是非侵入式架构,其在自动化运维领域很受欢迎。

在 Go 中实现非侵入式架构的关键是通过接口和组合来实现松耦合。以下是一些实现非侵入式架构的技巧:

关于 Go 反射

在 Go 中,reflect 是一个内置的包,它提供了一组用于运行时反射的方法和类型。使用反射可以在运行时动态地获取和操作**变量的值、类型和方法**。reflect 的主要作用是实现通用代码,例如 JSON 序列化和反序列化、类型转换、结构体拷贝等。

C10K 问题:单机一万并发

Dan Kegel 在他的个人网站中发表了一篇讨论单机并发的问题,简称 C10K 问题

文章中提及了当时的问题背景,以及可供参考的网站1和文章2。关于这个问题文中主要对 I/O 架构和 I/O 策略进行了讨论。

线程相关

进程: 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程。

线程: 进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。

与进程不同的是同类的多个线程共享进程的 堆**和**方法区 资源,但每个线程有自己的 程序计数器、虚拟机栈和本地方法栈 ,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。

Service Mesh

A service mesh, like the open source project Istio, is a way to control how different parts of an application share data with one another. Unlike other systems for managing this communication, a service mesh is a dedicated infrastructure layer built right into an app. This visible infrastructure layer can document how well (or not) different parts of an app interact, so it becomes easier to optimize communication and avoid downtime as an app grows.

Istio 架构

Istio 就是 Service Mesh2 架构的一种实现,服务之间的通信(比如这里的 Service A 访问 Service B)会通过代理(默认是 Envoy1)来进行。