微服务业务架构的探索

原文:微服务业务架构的探索 提示 阅读这篇文章,需要有以下准备: 在微服务下挣扎过 需要了解DDD和COLA架构思想 本篇文章围绕业务架构进行讨论 前言 公司在开始探索微服务架构时,使用的是三层架构(controller/service/model)。随着时间的推移,发现三层业务架构在微服务架构下越来越不适用,主要体现在下面2点: 业务逻辑离散在service层,不能很好的复用和表达能力差 业务代码和技术实现进行了强耦合,导致调试和测试困难 针对以上问题,我们开始探索新的业务架构,整理形成我们自...阅读全文

Segmentfault 2020-05-20 16:32:45 小卜邪

通俗易懂:说说 Python 里的线程安全、原子操作

首发于微信公众号:Python编程时光在线博客地址:http://python.iswbm.com/en/la... 在并发编程时,如果多个线程访问同一资源,我们需要保证访问的时候不会产生冲突,数据修改不会发生错误,这就是我们常说的 线程安全 。 那什么情况下,访问数据时是安全的?什么情况下,访问数据是不安全的?如何知道你的代码是否线程安全?要如何访问数据才能保证数据的安全? 本篇文章会一一回答你的问题。 1. 线程不安全是怎样的? 要搞清楚什么是线程安全,就要先了解线程不安全是什么样的。 比如...阅读全文

Segmentfault 2020-05-21 10:32:36 Python编程时光

记录一次go视频面试

### 简单记录一次go面试过程 *** 第一次面试go,完全不懂面试套路,被虐的体无完肤,面试完时没想到,后来复盘发现但其实我会.把面试问到的问题记下来供大家参考. *** ##### **1. 自我介绍** 回答:略. *** ##### **2. 项目中你觉得你做的不错的地方** 回答:略. *** ##### **3. 项目中闭包的使用** 当时完全没想到,后来翻看之前的的项目,才看见使用gin写的中间件到处都是. *** ##### **4.内置...阅读全文

Go语言中文网 2020-05-14 16:02:40 MrWusenshan

一篇搞b站的文章

## 一篇搞b站的文章 ### `csrf`攻击简述: * `CSRF`(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:`CSRF/XSRF` * 你这可以这么理解`CSRF`攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。 * 具体原理就不详细解释了推荐一篇文章:[浅谈CSRF攻击方式](https://www.cnblogs.com/hyddd/ar...阅读全文

Go语言中文网 2020-05-14 15:39:20 loop_0

golang逃逸分析

带GC语言给我们程序的编写带来了极大的便利,但是与此同时屏蔽了很多底层的细节,比如一个对象是在栈上分配还是在堆上分配。对于普通的代码来说虽然不需要关心这么多,但是作为强迫症程序猿,还是希望能让自己写出来的代码性能最优,所以还是需要了解什么是逃逸,以及如何判断是否发生了逃逸。 什么是堆和栈? 首先需要知道,我们说的堆和栈是啥。这个可不是数据结构里面的"堆"和"栈",而是操作系统里面的概念。 栈 在程序中,每个函数块都会有自己的内存区域用来存自己的局部变量(内存占用少)、返回地址、返回值之类的数据,...阅读全文

简书 2020-05-14 12:32:46 五行缺灬月下

golang的gc流程

一 经典的GC算法 引用计数(reference counting) 标记-清扫(mark & sweep) 复制收集(Copy and Collection) 二 标记-清扫(mark & sweep)算法 golang的gc算法主要是基于标记-清扫(mark & sweep)算法,在了解go的gc先了解一下传统的标记-清扫(mark & sweep)算法。 这个算法有2个操作 标记 清除 mark and sweep算法在执行的时候,需要程序暂停( stop the world ),大致的步...阅读全文

【golang】小技巧-利用io.copy写数据进文件

io.copy是按默认的缓冲区32k循环操作的,不会将内容一次性全写入内存中,这样就能解决大文件的问题。 resp, err := http.Get(url) if err != nil { fmt.Fprint(os.Stderr, "get url error", err) } defer resp.Body.Close() out, err := os.Create("/tmp/icon.png") wt := bufio.NewWriter(out) defer out.Close() ...阅读全文

简书 2020-05-14 11:33:00 dongzaidong

Golang Http 学习(一) Http Server 的实现

Http 服务是基于 Tcp 的应用层的实现,也是我们常见的网络协议之一。go 语言提供了较为丰富的http协议的实现包 net/http 包。http 是典型的C/S 架构(也是B/S架构),我们先从Server端入手,看看Http Server 是如何实现的。 请求连接的管理 golang 中, 连接的管理采用的是 Reactor 模式。每个请求到达服务器之后,都会分配一个 goroutine 做任务处理。 func (srv *Server) Serve(l net.Listener) e...阅读全文

Segmentfault 2020-05-20 22:32:35 搬砖程序员带你飞

Go slice和arry的区别

最近踩了一个go的坑,而这个坑的根本原因就是slice和arry的区别理解不清楚导致的。 一、问题提出,slice在被复制之后,修改复制之后的那个slice内容,结果复制之前的slice内容也变化了。 我们先来看一段代码: package main import ( "fmt" "reflect" ) func main() { var arr [8]int = [8]int{1} var arr1 [8]int var sl...阅读全文

Go语言中文网 2020-05-14 09:17:00 ZhDavis

Go语言之GRPC

1.RPC的基本知识介绍: RPC叫做远程调用框架(Remote Procedure Call),远程调用原理如下所示: 比如 A (client) 调用 B (server) 提供的remoteAdd方法: 首先,A与B之间建立一个TCP连接; 然后,A把需要调用的方法名(这里是remoteAdd)以及方法参数(10, 20)序列化成字节流发送出去; 接着,B接受A发送过来的字节流,然后反序列化得到目标方法名,方法参数,接着执行相应的方法调用(可能是localAdd)并把结果...阅读全文

Go语言中文网 2020-05-14 09:13:05 ZhDavis

Python对接企业微信会话内容存档功能的实践 —— Jinkey原创

背景 企业微信会话内容存档,是一项面对金融行业的开放的监管功能,其他行业可以找企业微信官方服务商[1]向腾讯申请审批开通。会话存档的推出是企业微信为了让企业可以了解员工与客户的互动情况,也为了避免员工拿走公司的客户资源 可获取的内容 图片、文字、语音、链接、视频、小程序,甚至是被撤回的消息,都能获取 image 开发 企业微信现在只提供 c++ 和 java 的sdk去调用接口,但是很多企业会用python,golang,php等其它语言开发应用。下面简单说一下python如何去调用企业微信会话...阅读全文

简书 2020-05-14 08:32:46 JinkeyAI

通过 Consul-Template 实现动态配置Nginx负载服务

【转载请注明出处】:https://www.jianshu.com/p/3fe4e15a1f99 Consul-Template简介 Consul-Template是基于Consul的自动替换配置文件的应用。在Consul-Template没出现之前,大家构建服务发现系统大多采用的是Zookeeper、Etcd+Confd这样类似的系统。 Consul官方推出了自己的模板系统Consul-Template后,动态的配置系统可以分化为Etcd+Confd和Consul+Consul-Templat...阅读全文

简书 2020-05-14 08:32:44 后端老鸟

Golang——运算符和格式化输出

运算符 算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、其他运算符 算术运算符 + 相加 - 相减 * 相乘 / 相除 % 求余 ++ 自增 -- 自减 func main(){ a := 2 b := 7 fmt.Println(a + b) //9 fmt.Println(a - b) //-5 fmt.Println(a * b) //14 fmt.Println(a / b) //0 fmt.Println(a % b) //2 a ++ fmt.Println(a) //3 ...阅读全文

简书 2020-05-14 08:32:44 Cici冬雪

Golang基础语法:变量(一)--十安辰

变量介绍 概念 变量相当于内存中的一个数据存储空间的地址,你可以把计算机看作一栋大楼,变量就是大楼的房间的门牌号,我们通过门牌号找到对应房间,存放货物 ,取用货物。 变量的使用的基本步骤 1、变量声明(定义变量) 2、变量赋值,变量初始化 3、使用变量 例子: package main import "fmt" func main() { //变量声明(定义) var a int //给a赋值 a = 10 //使用变量 fmt.Println("i=",i) } Golang变量使用的三种方式...阅读全文

简书 2020-05-14 08:32:44 十安辰

Golang基础语法:变量(二)--十安辰

加号的基础应用 1、当左右两边都是数值型时,为加法运算 2、当左右两边都是字符串运算的时候,做字符串拼接 例子: package main import "fmt" //+号的运用 func main() { var i, j = 1, 2 var r = i + j //加法运算 fmt.Println("r=", r) var str1, str2 = "hello", "world" var str = str1 + str2 //做字符串pin'jie fmt.Println("str=...阅读全文

简书 2020-05-14 08:32:43 十安辰

Golang——流程控制

常用if和for,switch和goto属于扩展的 注意:Go 没有三目运算符,所以不支持 ...?...:...形式的条件判断。 1.条件语句 if else func main() { a := 1 if a < 0 { fmt.Println("小于0") } else if a == 0 { fmt.Println("等于0") } else { fmt.Println("大于0") } } 注意: 1.不需要使用括号()将条件包含起来; 2.无论语句体内有几条语句,花括号{}都是必须存...阅读全文

简书 2020-05-14 08:32:43 Cici冬雪