IM-基础知识

IM 消息可靠性及一致性的解决方案

参考文章

对于 IM 系统消息可靠性及一致性问题,通过消息重发机制保证消息成功被服务端接收,通过会话记录检查保证收取消息完整,从而保证整个消息发送过程的可靠性;使用 uuid 消息去重,参考向量时钟算法进行消息排序,为保证消息一致性提供一种解决方案。

数据传输方式汇总

json

JSON是一种更轻量级的基于文本的编码方式,经常用在client/server端的通讯中。

yaml

YAML类似JSON,新的特性更强大,更适合人类阅读,也更紧凑。

Mysql 基础知识二

一、基础知识

  1. 表存储引擎必须用InnoDB
  2. 字符集必须使用utf8mb4 (utf8不是真utf8)
  3. 禁止使用存储过程、视图、触发器、Event
  4. 命名规则:库、表、字段列都必须小写,用 _ 分隔
  5. 表必须有主键,默认推荐使用unsignd整形,命名为id,自增
  6. 字段必须为not null,原则上每个字段必须有默认值
  7. 合理建立索引
  8. 三范式与反范式(业务出发,权衡利弊、适当冗余)
  9. 分库分表:垂直拆分(分库)、水平拆分(分表) 分表:垂直分割(一表变多表,结构相同)、水平分割(大表拆小表)
  10. 数据库集群:主从架构

二、事务、锁、索引,数据库性能的死亡三角

A. 事务

Iris 框架

官方文档

Iris 简介

Iris 是一个拥有 MVC 架构模式的 Go Web 框架。

Iris 以简单而强大的api而闻名。 除了 Iris 为您提供的低级访问权限。

Iris 为您提供构建面向服务的应用程序的结构。 用 Iris 构建微服务很容易。

Go 基础知识

Go 简介

Go 语言起源 2007 年,并于 2009 年正式对外发布,其是谷歌公司的一个开源项目。Go 语言并不是凭空而造的,而是和 C++、Java 和 C# 一样属于 C 系。

Go 语言本身是由 C 语言开发的,而不是 Go 语言。但 Go 在 1.5 版本开始自举。

队列与栈

队列

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 队列:FIFO即First in First Out,先进先出
from queue import Queue

q = Queue()

for i in range(5):
    q.put(i)

while not q.empty():
    print(q.get())

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 栈:LIFO即Last in First Out,后进先出
from queue import LifoQueue

q = LifoQueue()

for i in range(5):
    q.put(i)

while not q.empty():
    print(q.get())

queue介绍

在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换的时候,队列就出现了,队列可以完美解决线程间的数据交换,保证线程间数据的安全性和一致性

经典案例

php vs go

php 优点

  • array 结构无所不能,很强大

php 缺点

  • 弱类型语言,同样的逻辑,写法过于多样,导致后期维护成本高。比如参数可定义可不定义,返回值可定义可不定义
  • 语言自身没有很好的支持并行运算

go 优点

设计模式

设计模式简介

设计模式一套被反复使用,多数人知晓的代码设计经验的总结,实现可重用代码,使代码更容易被理解,保证代码可靠性。

总体来说,设计模式分为三大类:

  • 创建型模式(五种):单例模式、工厂模式、抽象工厂模式、创建者模式、原型模式
  • 结构型模式(七种):适配器模式、代理模式、装饰器模式、外观模式、桥接模式、组合模式、享元模式
  • 行为型模式(十一种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

算法执行的步骤是稳定不变的,但是具体的某些算法可能存在变化的场景。