V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
caixiangyu17
V2EX  ›  程序员

大厂同学来分享一下你们在用,但小公司可能没有用的好技术吧

  •  1
     
  •   caixiangyu17 · 2021-12-17 07:14:29 +08:00 · 9072 次点击
    这是一个创建于 1104 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有很多小公司,因为前期就是为了快速出产品,所以什么东西都从简。大厂的同学们来分享一下,你觉得虽然有点耗费成本,但是很有必要的技术或者是开发理念吧。我先从自己经历说两个抛砖引玉

    1. git hooks 里面的 pre-push 。我们现在是把 pipeline 上的几乎所有检查都放在 pre-push 里面,这样就可以很大程度杜绝有人 push 代码前不跑 unit test ,之后也不检查 pipeline 是否挂掉。虽然 push 一次要十多分钟,不过每天大概一到两次 push 也就够了,而且有一个状态缓存的机制,如果有一些 test 的 coverage 没有动过,并且上次跑过了,就不用再次检查。所以整体也是可以接受的。
    2. 跨系统开发环境。所有的开发环境都配置好相关的 docker image 。写好脚本,里面有各种 task ,什么 debug ,lint ,unit test ,secret check ,vulnerability check 都可以不考虑本地环境,在 docker 里面执行。这样对新人极其友好,配置环境只需要下载 IDE+docker 。之后只要 clone 代码就能跑。同样这些可以放在前面说的 pre-push 以及 pipeline 里面直接使用。我们现在用的是 batect ,半内部的一个工具,可以帮助快速配置管理 docker 。

    其实还有很多,比如 TDD ,UI test(automation + screenshot),微服务+bff 模式,可能小公司也没有。只是抛砖引玉,希望大厂同学不吝赐教,分享一些好的东西,让小公司的同学也都有机会了解一些更高级的东西。毕竟网上宣传的技术不一定好用,还是得真的在环境里面用过才有发言权。

    62 条回复    2021-12-23 12:47:11 +08:00
    ericgui
        1
    ericgui  
       2021-12-17 07:23:52 +08:00
    “跨系统开发环境” 我司这么大都没有

    我们只能用 windows 写前端,你感受一下
    caixiangyu17
        2
    caixiangyu17  
    OP
       2021-12-17 07:28:14 +08:00
    @ericgui Windows 的 docker 很蛋疼,不过好像也可以解决,我们团队里面也有一些人用 windows ,之前是又一些抱怨,不过貌似花时间解决了。
    murmur
        3
    murmur  
       2021-12-17 07:57:29 +08:00
    第二个还真的很蛋疼,不是有脚手架么,非得整 docker
    vruzo
        4
    vruzo  
       2021-12-17 07:59:03 +08:00 via iPhone
    我司虽然上市公司…不过这些都没有,全靠人工测,对这些还是蛮感兴趣,不过现有流程不支持尝试
    MrGba2z
        5
    MrGba2z  
       2021-12-17 08:07:11 +08:00   ❤️ 4
    ; Monorepo + 索引 /搜索 + 唯一版本的依赖
    唯一版本依赖: 1. 坏了有别人也会发现 2. 不用关心用哪个依赖, 适配最新就行.
    Monorepo: 好抄 /读类似系统源码, 知识共享, 方便 debug
    ; Intention-based 持续部署
    描述你想要的生产环境是怎样的, 系统持续部署你定义的生产环境.
    ; 不算技术但同样重要: Blameless culture (出了故障不应该责备任何人, 重要的是如果设计 /改进系统来防止有类似的事情继续发生)
    caixiangyu17
        6
    caixiangyu17  
    OP
       2021-12-17 08:35:27 +08:00
    @murmur 在有些情况还是很有意义的。举个例子,一个后端项目,肯定是要有数据库吧,那么你作为开发需要先在本机安装配置数据库吧,有些人写脚本可能喜欢用 bash ,有些人可能用 python ,如果是 windows 环境,这两个你都需要配置才能让他运行吧。本地测试数据库和接口测试数据库最好分开吧,这也需要配置。但是如果用 docker ,至少开发环境,你只需要考虑你自己的主开发语言环境,什么数据库,什么脚本语言,通通不用配置。我们的项目现在基本上可以说一个新人来了,装个 java ,装个 docker ,装个 idea 。不算下载时间,配置十几分钟就能跑起来。我相信还是有一些项目新人来了,各种库报错,各种配置不知道怎么改,新人自己又未必能解决,问别人又可能要等,来了一整天都运行不了的情况还是有的。至少我现在回想我以前的公司,就有这种情况。
    ragnaroks
        7
    ragnaroks  
       2021-12-17 08:42:59 +08:00
    windows 上的 docker 确实蛋疼,官方支持版是个虚拟机,企业版是 docker EE (WCOW) 而且有重大 BUG
    sagaxu
        8
    sagaxu  
       2021-12-17 08:47:48 +08:00 via Android
    后端项目,本地不运行,写好了发布到测试环境自测。因为很多 service 本地没有,只能在测试环境调用,本地要跑起来要 mock 太多的东西了。
    JsonTu
        9
    JsonTu  
       2021-12-17 08:50:37 +08:00
    这两天在研究 docker 跨主机通讯,使用 weave net 做 docker 网桥,服务还得主备,哎
    wzzzx
        10
    wzzzx  
       2021-12-17 08:51:09 +08:00
    这个跨系统开发能力是不是每个项目一个 docker ?可以展开说说嘛?我很有兴趣😂
    labulaka521
        11
    labulaka521  
       2021-12-17 09:04:49 +08:00 via iPhone
    小公司,后端用 grpc ,然后用 envoy 转换 http 和 grpc ,前端根据后端的 proto 生成 api 直接调用
    sadfQED2
        12
    sadfQED2  
       2021-12-17 09:08:24 +08:00 via Android   ❤️ 1
    Clickhose,tidb 相见恨晚,去他妈的 mysql
    tomczhen
        13
    tomczhen  
       2021-12-17 09:11:21 +08:00 via Android
    我是来酸的。好了,好了,知道大厂有牛逼的高级工具了。
    一不说具体的 workflow ,二不说工具基本原理,除了让小公司的同学知道大厂有个牛逼的高级工具之外有啥用处?
    plko345
        14
    plko345  
       2021-12-17 09:16:00 +08:00 via Android
    请教 pre-push 没太明白,不先 push 是怎么触发 pipeline 的
    tomczhen
        15
    tomczhen  
       2021-12-17 09:18:34 +08:00 via Android
    @plko345 本地 git hook ,触发本地的检查。远程仓库也有 hook ,都能达到一样的目的。
    https://git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%90
    nicktogo
        16
    nicktogo  
       2021-12-17 09:19:42 +08:00
    想了下,挺喜欢公司的一些工具的,可能其他公司也有:
    1. logger ,一条龙从头到尾,从写入,储存,数据分析工具全包了,只要自己定义 fields ,在代码里 call 就好了。
    2. Async task scheduler ,定时任务。
    3. 远程服务器开发,要有的时候 claim 一个服务器,VS code 连上,master 代码都已经准备好了,服务器就是一个完整的应用实例,实际环境有的这都有(至少看起来是,怎么搞的不太清楚)。 即使没有 commit 也自动备份代码,这个好用,可以恢复到任意其他的服务器上。
    4. VS code 用 UI 操作代码分支,支持各种操作,方便。命令行已经忘光。
    5. 全公司用一个代码库,所以可以大范围地代码搜索,不会写 /用,搜一搜就有大量例子。

    。。。
    sdwgyzyxy
        17
    sdwgyzyxy  
       2021-12-17 09:22:32 +08:00
    windows 主要是 volume 导致的体验不好,如果用 sftp 本地开发,就不会有这个问题,想使用 volume 的话用 ubuntu ,我们也是搞了一键启动的 docker-compose ,而且很多基础镜像都备份到自己的阿里云账号下了,一直使用官方的要小心他们哪天改东西,然后项目就出一些莫名其妙的问题。
    superchijinpeng
        18
    superchijinpeng  
       2021-12-17 09:27:59 +08:00
    Kyuubi
    superchijinpeng
        19
    superchijinpeng  
       2021-12-17 09:28:05 +08:00
    Iceberg
    sdwgyzyxy
        20
    sdwgyzyxy  
       2021-12-17 09:29:07 +08:00
    @sdwgyzyxy 另外,我不是大厂的,技术就三个人,都是瞎鼓捣的一些东西。
    xylophone21
        21
    xylophone21  
       2021-12-17 09:43:07 +08:00
    1 为什么不在 PR 里做呢?先推到个人分支,然后在个人分支里检查,检查通过再找人工走读,最后 merge
    WhereverYouGo
        22
    WhereverYouGo  
       2021-12-17 10:12:32 +08:00
    歪个楼,14 15 楼是情头? 😶
    WhereverYouGo
        23
    WhereverYouGo  
       2021-12-17 10:12:59 +08:00
    @sweetsorrow211 #22 说错了,是 15 16 楼
    SmiteChow
        24
    SmiteChow  
       2021-12-17 10:23:03 +08:00
    只要技术目标是解决规模化(业务或人力)问题的,对小企业来讲都没用。
    Austaras
        25
    Austaras  
       2021-12-17 10:40:35 +08:00
    第一点属实没必要,你们没有内部开发平台和 CI 流水线的吗,在本地跑太耽误事了
    Austaras
        26
    Austaras  
       2021-12-17 10:41:21 +08:00
    只要 merge 到 master/dev/online 之前保证 CI 能过不过不让合不就完了
    Chism
        27
    Chism  
       2021-12-17 10:43:39 +08:00
    最近不少这种镜像帖子。。
    caixiangyu17
        28
    caixiangyu17  
    OP
       2021-12-17 11:00:42 +08:00
    @wzzzx 其实是本地开发,大多数都是脚本的功劳,docker 的目的是尽量少依赖本地环境。让新人或者是换新电脑能够快速搭建开发环境。
    比如我自己的小项目,每次换新电脑,只需要安装 nodejs (如果只跑也可以不用,就相当于部署在本机而已,用 docker 启动,不过开发 node 后端肯定还是要的),docker 和 java (我用的工具是 kotlin 写的,叫做 batect ,同事开发,现在几乎全公司推广)。之后所有需要的比如启动数据库,跑 linting ,unit test ,api test ,各种安全检查。都可以用命令启动配置好的不同的 docker 镜像,在里面执行。当然这些只用脚本也能完成,但是不同的 task 依赖的工具你得一点一点装,mac 上还好点 brew install 比较方便,但也得一个一个装,这样才能保证所有 task 都能运行,windows 上就更加麻烦了。
    所以这东西就是前期配麻烦,弄好了之后,以后每个项目都类似,基本这些 task 每个项目都需要,用起来很方便
    caixiangyu17
        29
    caixiangyu17  
    OP
       2021-12-17 11:09:44 +08:00
    @Austaras 我反而觉得第一个挺重要,我之前的公司就是小公司,pipeline 挺全的,有各种测试,但是如果挂了就会 block 后面人的 build 。如果不修好,后面人的代码就没法发布到 test server ,就没法让 QA 测。但是因为也不是 tdd ,只是想起来哪里需要 unit test 就加哪里,所以经常有人不跑 unit test 就提代码,然后也不看 pipeline 挂了没有。所以每次后面的人还要去看是谁 block 了 pipeline ,发消息让他改。一个小时你的代码能上 test server 就不错了,十分影响效率。但是有 prepush 之后,push 前强制跑,跑不过不让 push ,虽然浪费点时间,但是我们都是每天下班前 push ,或者 push 的时候就当休息,喝点水聊聊天,也并不影响什么。但是解决的问题确是实实在在的。
    Canon1014
        30
    Canon1014  
       2021-12-17 11:15:57 +08:00
    @sweetsorrow211 #22 歪个楼,你和 20L 也有那味了
    asanelder
        31
    asanelder  
       2021-12-17 12:44:24 +08:00   ❤️ 1
    相比小公司的那个贴子, 大厂的同学都好吝啬啊~~~
    caixiangyu17
        32
    caixiangyu17  
    OP
       2021-12-17 12:46:04 +08:00
    @asanelder 可能大厂的同学没空逛 v 站吧
    Mirage09
        33
    Mirage09  
       2021-12-17 12:51:14 +08:00 via iPhone
    说个跟技术无关的,internal wiki
    Austaras
        34
    Austaras  
       2021-12-17 13:00:37 +08:00
    @caixiangyu17 用 git workflow 每个人都有自己的分支不就完事了,然后测试服务器也做好分支切换
    rouzip
        35
    rouzip  
       2021-12-17 13:18:36 +08:00
    lynx 类前端体验多端开发(但是这算是好技术嘛 orz
    caixiangyu17
        36
    caixiangyu17  
    OP
       2021-12-17 13:22:08 +08:00
    @Austaras 的确如果你们 github 上配置了每个分支在 pr 时必须跑过 pipeline 才能 merge ,的确可以防止这个问题。不过我们是 tbd ,所以没有 branch ,需要 prepush
    rioshikelong121
        37
    rioshikelong121  
       2021-12-17 13:37:16 +08:00
    使用 Proxy 来在本地连接 /切换多套环境.
    xy90321
        38
    xy90321  
       2021-12-17 13:48:13 +08:00 via iPhone
    对于传统 IT 企业的巨型屎山项目来说 pipeline 真的很难运转起来。就算 UT 都能过,但是跑一次要半小时以上谁受得了😅
    AmberJiang
        39
    AmberJiang  
       2021-12-17 14:07:37 +08:00
    @Canon1014 哈哈哈哈 歪个楼 你也发现了 有两组情头🤣
    WhereverYouGo
        40
    WhereverYouGo  
       2021-12-17 14:07:53 +08:00
    @Canon1014 #30 😂 淦
    cassyfar
        41
    cassyfar  
       2021-12-17 14:19:42 +08:00
    傻瓜式包管理加编译,我编了几年 java 都不知道 maven 和 gradle 是啥。
    傻瓜式一键部署生产环境 + CICD ,我现在对着 k8s 真的欲哭无泪,太难用了。
    pwcong
        42
    pwcong  
       2021-12-17 14:20:51 +08:00
    @rouzip 字节老哥了
    litchinn
        43
    litchinn  
       2021-12-17 14:41:00 +08:00
    @sweetsorrow211 你不说我都没发现,一眼扫下来以为是一个人的连续发言,🤣
    litchinn
        44
    litchinn  
       2021-12-17 14:41:59 +08:00
    @cassyfar 介绍下你的傻瓜式呀,怎么弄的
    pengtdyd
        45
    pengtdyd  
       2021-12-17 14:44:42 +08:00
    绝对是 Git 大部分公司都用不明白
    Mirage09
        46
    Mirage09  
       2021-12-17 14:56:35 +08:00 via iPhone
    @litchinn 目测是亚麻的 brazil build 和 pipeline 吧,Brazil build 是挺复杂的一个东西,小公司不一定有那个能力 /人力去做; pipeline aws 上有类似的 code pipeline
    Austaras
        47
    Austaras  
       2021-12-17 15:07:55 +08:00
    tbd 是啥
    zgw0
        48
    zgw0  
       2021-12-17 15:22:55 +08:00
    @rouzip 愿天堂没有 lynx 🤪
    hahaFck
        49
    hahaFck  
       2021-12-17 16:18:06 +08:00
    你们的 docker 支持 m1 电脑么?
    Chrisssss
        50
    Chrisssss  
       2021-12-17 17:15:38 +08:00
    serveless ,基建做好了上层写起来真的舒服。
    zongren
        51
    zongren  
       2021-12-17 17:41:30 +08:00
    有一说一,docker 统一开发环境深得我心
    nicebird
        52
    nicebird  
       2021-12-17 18:04:21 +08:00
    两个都还行
    MegrezZhu
        53
    MegrezZhu  
       2021-12-17 18:12:20 +08:00
    不算技术的一个东西,readability review ,所有 PR 不仅要 code owner 给过,还得额外(如果 owner 没有)找有代码可读性认证的人过一遍检查代码风格跟最佳实践之类的东西
    LING97
        54
    LING97  
       2021-12-17 18:55:49 +08:00
    什么好技术不敢说,只能说各种基础设施非常完备。我倒是希望能进这些基础平台部门,这才是锻炼技术
    caixiangyu17
        55
    caixiangyu17  
    OP
       2021-12-17 18:56:18 +08:00
    @Austaras trunk based development
    ScepterZ
        56
    ScepterZ  
       2021-12-17 19:25:55 +08:00
    感觉无非是一些公司自己开发 /魔改的东西,小公司不想自己开发也有开源的用,没啥很独特的
    kidonng
        57
    kidonng  
       2021-12-17 21:27:02 +08:00 via Android
    @sweetsorrow211 都是用 FaceYourManga 做的
    zu1y
        58
    zu1y  
       2021-12-18 01:17:33 +08:00   ❤️ 3
    推荐一个 百度开源的 amis 框架,使用 json 配置写页面。

    封装后管理后台整体的基础框架后,开发一些内部常用的增删改查的页面只需要十来分钟,热更新,修改不用部署。

    特别是结合他的可视化编辑器以及后端相关的代码生成机制后,一个页面点击一下就能生成主体内容,只需要改下组件类型就能上线。

    (身为一个后端开发,之前写一个管理后台页面,用 Vue 开发,简单点的页面也得一两个小时,复杂点的大半天都搞不定,用了 amis 之后基本上没有一个页面开发能超过半个小时
    clockwork1122
        59
    clockwork1122  
       2021-12-18 22:50:26 +08:00
    @nicktogo 全公司一个库的话不担心代码泄露吗
    leishi1313
        60
    leishi1313  
       2021-12-19 01:57:45 +08:00 via Android
    @MrGba2z 浓浓的谷歌味
    WhereverYouGo
        61
    WhereverYouGo  
       2021-12-20 09:59:47 +08:00
    @kidonng #57 原来如此
    rouzip
        62
    rouzip  
       2021-12-23 12:47:11 +08:00
    @pwcong 女朋友是字节的,天天听她吐槽。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1079 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 19:13 · PVG 03:13 · LAX 11:13 · JFK 14:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.