PGO(profile-guided optimization) 配置文件引导的优化,也被称为反馈驱动的优化(FDO),是一种强大的优化技术,它使用程序运行时行为的配置文件来指导编译器对该程序未来构建的优化。这种技术也可以应用于其他构建阶段,如源代码生成、链接时间或链接后时间(如LTO、BOLT、Propeller),甚至是运行时间。
最近,在使用grpc,grpc-gateway时,遇到一个奇怪的问题,返回结果中一个参数在proto中定义的类型是int64,但通过grpc-gateway返回的json结果数据中确变成了string类型,为啥返回的类型和proto定义的类型不一样呢?难道是grpc-gateway做了手脚,于是一通狂搜和翻阅源码,终于解决了心中的疑惑。
本教程教大家如何在Kubernetes集群中使用Cert Manager集成Letsencrypt SSL证书到Istio gateway中。
随着多核CPU的出现,我们需要能够利用这些额外内核的编程模式,以并发的方式处理任务。 Actor模型就是这样一种模式,它模拟了大量独立的工作,以任何顺序处理,不需要锁同步。 Actor模型的一个非常普遍的用法可以在网络服务器中找到,Java中的Play! Java中的框架就是一个例子。一般来说,任何并发的应用程序都可以建立在Actor模型之上。
在这篇文章中,我将实践如何用Go实现一个原始的actor模型。我们将利用Go为并发提供的工具–goroutines、channels和wait groups。
我们在编写Dockerfile时,选择基础镜像时会困惑,带有标签Alpine、Slim、Stretch、Buster等的这些标准镜像到底有什么不同,该如何选择作为我们的基础镜像呢,如果你有这样的困惑,本文会给你答案。
引用wikipedia上对依赖反转原则的解释:
在面向对象编程领域中,依赖反转原则(Dependency inversion principle,DIP)是指一种特定的解耦(传统的依赖关系创建在高层次上,而具体的策略设置则应用在低层次的模块上)形式,使得高层次的模块不依赖于低层次的模块的实现细节,依赖关系被颠倒(反转),从而使得低层次模块依赖于高层次模块的需求抽象。
该原则规定:
- 高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口。
- 抽象接口不应该依赖于具体实现。而具体实现则应该依赖于抽象接口。
引用wikipedia上对里氏替换原则的解释:
里氏替换原则(Liskov Substitution principle)是对子类型的特别定义, 指“派生类(子类)对象可以在程序中代替其基类(超类)对象”。
容器及其周围的生态系统改变了工程师部署、维护和排查工作负载故障的方式。但是,在 Kubernetes 集群上调试应用程序有时可能会很困难,因为你可能在容器中找不到所需的调试工具。许多工程师使用基于精简、发行版构建无发行版的基础镜像,其中甚至没有包管理器或shell。甚至一些团队使用 scratch 作为基础镜像,并且只添加应用程序运行所需的文件。这种常见做法的一些原因是:
引用wikipedia上对接口隔离原则的解释:
接口隔离原则(英语:interface-segregation principles, 缩写:ISP)指明客户(client)不应被迫使用对其而言无用的方法或功能。接口隔离原则(ISP)拆分非常庞大臃肿的接口成为更小的和更具体的接口,这样客户将会只需要知道他们感兴趣的方法。这种缩小的接口也被称为角色接口(role interfaces)。接口隔离原则(ISP)的目的是系统解开耦合,从而容易重构,更改和重新部署。接口隔离原则是在SOLID中五个面向对象设计(OOD)的原则之一,类似于在GRASP中的高内聚性。
引用wikipedia上对开闭原则
的解释:
在面向对象编程领域中,开闭原则 (The Open/Closed Principle, OCP) 规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。该特性在产品化的环境中是特别有价值的,在这种环境中,改变源代码需要代码审查,单元测试以及诸如此类的用以确保产品使用品质的过程。遵循这种原则的代码在扩展时并不发生改变,因此无需上述的过程。
在本文中,我们将通过实践的方式深入探索这一原则。