后端开发和部署的若干约定

上周新人 Los 加入;对 Yii 熟悉的对 Laravel 不熟悉,反之亦然;这里记录一下代码设计的约定;关于 Redis 的约定初步成型(after 3 weeks since 1st Nov.);

原则
  • 结构良好;
  • 代码整洁;
  • 风格一致;
数据库
  • 数据库名:db_*
  • 时间字段
    _intm 插入时间,_uptm 更新时间,_detm 删除时间,_pptm:参与时间;
    使用 UNIX 时间戳格式;
    时间字段大多内部使用,提升可测性和运营排查问题;
Redis 的原则
  • 一个应用一般使用一个 redis 实例;
    不同的应用可以使用同一个实例;
  • 一个应用一般使用一个库;
    不同的应用一般使用不同的库;
    多库不会增加性能,只会增加部署复杂性;
  • 使用命名空间对库进行分隔;
    提高 key 的可读性;改善 key 冲突的可能性;
Redis 库
  • 0:通常不使用,保留供 laravel 升级使用;
  • 1:数据缓存;
  • 其他:一般不使用,特殊业务考虑使用;
  • 32:st:$short_tag => long_url;
不同环境下的 Redis 库配置
环境 库ID 范围
me(local) 1 [1-10]
dev 11 [11-20]
test 21 [21-30]
prod 31 [31-40]
Redis key 约定
  • :做间隔符,形如:a:ba:b:c;字母全部小写;
    a:业务;b:数据(by 指明筛选条件);c:条件;
    对于 b 要使用一个 word 来表示数据或者 action,比如:chatter,onliner,focus;
    key 不要太长;简洁能标明主旨即可;可以通过 redis_key 字典查询具体含义;
    不标注数据类型,不标注 _list(抛弃执念);
  • www:user:$id
    哈希结构,www 表示默认业务;user 表示用户表;$id 表示主键字段值;
  • www:uid_by_phone:$phone
  • 已发言用户:im:chatter_by_demand_id:
    zsets 结构,首次发言时间为 score,uid 为 member;
  • 在线用户:im:onliner
    哈希结构,uid 为 field,上线时间为 value;或者 zsets 结构;
    相对 zsets,哈希耗费小,数据多时可自动压缩;
  • 接口形式:i:接口索引:
    比如:i:a08 就是 a08 接口默认类型(string)数据;
接口
  • API Design First
    接口的设计很重要;如何对接口分组,要考虑 controller 和 model 两方面;
  • controller/action 设计:demand/b42,其中 b42 就是接口文档的命名索引;
    好处是便于交流,要了解其具体含义要依靠查询接口文档来解决;往常 action 的命名是一个难题,命名不好的话反而造成误导;索引法至少不会太坏;
  • 接口的测试代码和实现代码 同等重要
    探索性测试用例的设计、测试代码的编写,要和实现代码一起 review;
关于测试
  • 模块的可测试性;
    类似 前端,后端要建立模块测试机制,实现可单独调试、可单独测试、可单独发布,以支持持续集成、持续测试、持续发布;
  • Debug 技术不仅要掌握,而且要精通;
    比如 ZendDebug;
    不会 Debug,编码效率不会太高;学会 debug,上了一个台阶;
    没有条件 Debug,解决问题的效率不会太高;
  • PHPUnit
    Yii 和 Laravel 框架的默认 Unit Tests 测试工具都是 PHPUnit;Yii 也使用 codeception 做更多测试;
  • 测试有益心理健康;
    一个工程师害怕改代码,那简直是笑话;
    改了一个问题引起两个问题,那更是灾难;
    有测试做保障,特别是自动化测试,可以解除恐惧,卸掉心理负担,从此放心大胆地重构,质量还能得到保证;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,651评论 18 139
  • 原文链接 必备品 文档:Documentation API:API Reference 视频:Laracasts ...
    layjoy阅读 8,607评论 0 121
  • 转载地址:http://gnucto.blog.51cto.com/3391516/998509 Redis与Me...
    Ddaidai阅读 21,450评论 0 82
  • 我并不是热衷于文学,只是偶尔胡思乱想,有时能迸发出“奇妙”的东西。 第一次,在简书上写,内心有些激动。今天来谈谈“...
    长安忆江南阅读 476评论 0 1
  • 1.未来,在时间这个战场上,有两门生意会特别值钱。第一,就是帮别人省时间,第二,就是帮别人把省下来的时间浪费在那些...
    阿凡提说AI阅读 262评论 0 0