不会飞的章鱼

熟能生巧,勤能补拙,静能生慧;念念不忘,必有回响。

MTV架构

设计思想

  • 不重复造轮子
  • MVT
  • 快速开发
  • 灵活易于扩展
  • 松耦合
  • 显式优于隐式

优缺点

阅读全文 »

今天是和T项目合伙人的第4or5次开线上腾讯会议,为了一个数据库表的问题争论了10几分钟,才发现问题原来出在我这里,我把问题想复杂了,导致Th童鞋进度慢了两周,额,好吧,在此说声抱歉….

目前产品原型图、人员都固定了,就照着做就行。然而没想到还是会出现这样那样的问题,Lzd都感到无语了。

但是,我想,也许这就是一个磨合的过程吧,如果不是这次项目合伙,我也不会频繁的和你沟通、从而了解你的野心、你的执行力,甚至不知道川大南门那附近的一家好吃的小笼包店,嘻嘻…

后面的路,我想我得抓紧赶业务流程了,感谢目前公司带我的leader,耐心指导我的编码风格,让我一点一点的走上正轨,让我慢慢掌握了gormgin这两个主流后端框架。

加油,办法总比困难多,迎难而上解决掉,让自己不断成长!

阅读全文 »

本以为自己离开了地狱走向天堂,却不知离开的才是天堂,走向的才是地狱。

什么是地狱、什么是天堂?

在我看来,只要是愿意将时光定格在某个时刻,并且保持身心愉悦,它就是天堂,反之即是地狱。

曾经的我非常怀念高三那段时光,虽然有成堆的试卷要做,但老班说做不完就别做了,睡眠要紧,每一章前几道题一眼就看出答案的就别做了…哈哈哈,这句话至今印象深刻。

那时候的我,单纯且乐观,对待一切事物都是尽力就好,不留遗憾。心情不好的时候,约上一个朋友操场散心,亦或是放学留下来打球释放压力,大家开开心心的数着高考的倒计时日历…

阅读全文 »

日志

日志级别

https://github.com/golang/glog 是 google 提供的一个不维护的日志库,glog 有其他语言的一些版本,对我当时使用 log 库有很大的影响。它包含如下日志级别:

  • Info
  • Warning
  • Error
  • Fatal(会中断程序执行)

还有类似 log4go,loggo,zap 等其他第三方日志库,他们还提供了设置日志级别的可见行,一般提供日志级别:

阅读全文 »

缓存选型

memcache

memcache 提供简单的 kv cache 存储,value 大小不超过1mb。

我使用 memcache 作为大文本或者简单的 kv结构使用。

memcache 使用了slab 方式做内存管理,存在一定的浪费,如果大量接近的 item,建议调整 memcache 参数来优化每一个 slab 增长的 ratio、可以通过设置 slab_automove & slab_reassign 开启memcache 的动态/手动 move slab,防止某些 slab 热点导致内存足够的情况下引发 LRU。

阅读全文 »

网络通信协议

互联网的核心是一系列协议,总称为”互联网协议”(Internet Protocol Suite),正是这一些协议规定了电脑如何连接和组网。

主要协议分为:

  • Socket:接口抽象层
  • TCP / UDP:面向连接(可靠) / 无连接(不可靠)
  • HTTP1.1 / HTTP2 / QUIC(HTTP3):超文本传输协议

Socket 抽象层

阅读全文 »

功能模块

为了大部分用户的基本功能体验,满足用户需求,例如播放历史查看、播放进度同步等。离线型用户,app 本地保留历史记录数据。
同样的,也要考虑平台化,视频、文章、漫画等业务扩展接入。

  • 变更功能:添加记录、删除记录、清空历史。
  • 读取功能:按照 timeline 返回 top N,点查获取进度信息。
  • 其他功能:暂停/恢复记录,首次观察增加经验等。

历史记录类型的业务,是一个极高 tps 写入,高 qps 读取的业务服务。分析清楚系统的 hot path,投入优化,而不是哪哪都去优化。

架构设计

阅读全文 »

隔离

隔离,本质上是对系统或资源进行分割,从而实现当系统发生故障时能限定传播范围和影响范围,即发生故障后只有出问题的服务不可用,保证其他服务仍然可用。

服务隔离:动静分离、读写分离
轻重隔离:核心、快慢、热点
物理隔离:线程、进程、集群、机房

服务隔离

动静隔离:

阅读全文 »

架构设计最重要的就是理解整个产品体系在系统中的定位。搞清楚系统背后的背景,才能做出最佳的设计和抽象。不要做需求的翻译机,先理解业务背后的本质,事情的初衷。

功能模块

评论系统,我们往小里做就是视频评论系统,往大里做就是评论平台,可以接入各种业务形态。

  • 发布评论: 支持回复楼层、楼中楼。
  • 读取评论: 按照时间、热度排序。
  • 删除评论: 用户删除、作者删除。
  • 管理评论: 作者置顶、后台运营管理(搜索、删除、审核等)。

架构设计

阅读全文 »

工程项目结构

Standard Go Project Layout

/cmd

本项目的主干。
每个应用程序的目录名应该与你想要的可执行文件的名称相匹配(例如,/cmd/myapp)。
不要在这个目录中放置太多代码。如果你认为代码可以导入并在其他项目中使用,那么它应该位于 /pkg 目录中。如果代码不是可重用的,或者你不希望其他人重用它,请将该代码放到 /internal 目录中。

/internal

阅读全文 »