Dig101-Go之深入理解mutex

Dig101: dig more, simplified more and know more

sync.MutexGo实现的互斥锁,提供了基本的同步操作,使用很方便。

不过,你是否好奇过,Go是如何实现的Mutex,又是为什么要这样实现?

今天跟随几个问题,我们一起探索下Mutex背后的设计。

(不用担心,不会有大段的源码分析出现在本文😳)

Read More

Dig101-Go之如何在函数内修改指针指向

Dig101: dig more, simplified more and know more

今天来看一个小问题:如何在函数内部修改一个指针(参数或接收者)指向,使其值的改变能反映在函数外部

直接上代码,这样可以么?

1
2
3
4
5
6
7
8
9
type ArgType struct {
A string
b int
}

func modifyPointerArg1(arg *ArgType) {
arg = &ArgType{"arg1", 1}
fmt.Println("inside modifyPointerArg1:", arg)
}

Read More

OPA进阶-分布式利器Bundle

BundleOPA管理policydata的一种方式。

OPA实现的轻量级策略引擎,一开始就是为了云原生环境的service提供解耦的策略服务,分布式是必然要考虑的问题。

Bundle api的设计中,其实就全面考虑并体现了在分布式应用中如何更好的解耦策略引擎的管理。

比如:

  • 如何做集中配置管理
  • 如何动态更新策略
  • 如何监控策略引擎节点的状态以及决策日志收集

有了这些功能,再加上其高效的策略描述语言RegoOPA才真正称得上是云原生时代的通用策略引擎

本文将带大家简单梳理一遍Bundle的组织方式、管理api、及监控方式。

考虑到一次性过完不易消化,文末会提供一个直接可实操的docker-compose版本的demo,将全面覆盖本文细节

建议大家看完本文,本机运行去体验一下,会有更直观的理解。

Read More

OPA-重新定义规则引擎-入门篇

OPA,全称OpenPolicyAgent, 底层用Go实现,它灵活而强大的声明式语言全面支持通用策略定义。

而且,2019年4月2号OPA正式进入了CNCF,作为孵化级托管项目,详见声明

目前国内资料还比较少。

个人因为工作接触比较多,打算陆续分享些教程介绍下。

私以为策略引擎的技术选型完全可以多这个选择~~

什么是OPA

具体看官方文档 OPA philosophy docs

主要关键词是:

  • 轻量级的通用策略引擎
  • 可与服务共存
  • 集成方式可以是sidecar、主机级守护进程或库引入

opa

Read More