QCon 全球软件开发大会(北京站)门票 9 折倒计时 4 天,点击立减 ¥880 了解详情
写点什么

我与 SDK 之间的爱恨悲欢

2020 年 4 月 17 日

我与SDK之间的爱恨悲欢

在张爱玲的小说笔记中,我摘录过这么一句话:


你如果认识从前的我,也许你会原谅现在的我。


之所以将其摘录,是觉得这句话怎么看都很有道理,时间在变,人无时无刻也不在变,似乎充满了无尽的正能量。


的确,时间可以抹去多数的恨与悲,时间可以记录许多的爱与欢,可唯独那些惨杂着爱恨悲欢的事件,不但无法抹去,而且铭记在心。


在我的从业生涯中,够资格的,应该要属围绕 SDK 所发生的那点事了。


这里说的 SDK 是什么?


所谓 SDK,全称为 (Software Development Kit) ,中文叫 “软体开发工具组”,是用来帮一个产品或平台开发应用程式的工具组,由服务开发者提供给接入开发者使用的的工具包。


说白了,就是一个用于连接服务端的公共组件工具箱。


自古道 “手巧不如家什妙”,好工具不仅能够提高开发效率,避免重复开发,而且还能降低 BUG 率,便于升级与维护;


可自古又道 “拙匠常怨工具差”,当出现问题或异常时,把工具当成头号嫌疑犯,这也是常有的事。


爱与欢:SDK 是最人性化的设计

今年年初,为了提供更好的基础服务体验,基于松耦合、快速迭代的产品理念,在分布式缓存的第三代设计上,我们果断放弃了第二代所采用的 OpenAPI 模式,而尝试 SDK 模式,结果受到应用研发各团队的一致好评。


从产品收益者的角度来看,SDK 给接入者带来的收益是:


进一步拓展传统的统一通信和控制台边界,方便开发者、链路跟踪及日志分析等功能紧密整合到一起,从而创建独一无二的管理者体验;


通过 API 封装通信功能,降低开发者对通信技术和协议的门槛,直接调用通信能力内嵌于应用之中;


利用 SDK 实现负载均衡策略,支持热加载,与平滑过渡、扩容伸缩;


这些收益确实实在在的落在了掌心,为用户带来了多、快、好、省的利益,得到赞美与夸奖也是理所当然的。


就在上线的第二周,为了这样表彰大家的辛劳,推杯换盏在所难免,在宴席上,某同学借着酒劲说了一句 “SDK 应该说是最人性化的设计啦”


的确,无论服务方还是接入方,此时此刻充满脑海的,除了爱,更多的是欢……


恨与悲:异常都是 SDK 惹的祸?

几个月前,在某次缓存超时告警事件中,原本沾沾自喜的 SDK 模式,却被推到了风口浪尖:


SDK 交付前测过吗?测过?没问题?那为什么我们一用上就有异常?


我们 FullGC 那么高,是不是你们 SDK 导致的?


负载均衡算法是不是有问题?你们是怎么实现的?干嘛之前不告诉我们?


连珠炮般的问题,有时让人难以招架,不过又由于缺乏数据留痕、监控评测、日志分析等手段而难以给出具有说服力的回应,所以唯一能做的就是当出现问题时,用主动积极的态度、人肉化的手段,勉强应对进行处理。


在大智慧工作期间,类似的场景我也遇见过多次,一般任何以 SDK 模式提供接入的平台或产品,当应用本身出现异常或故障时,SDK 都会被优先贴上疑犯的标签,随后被拖到死角打个半死,甚至屈打成招(无法提供有效证明)的案例不在少数。


不可否认的是,SDK 的场景模拟测试至关重要,但令人愤恨的是,要想持续开展却非常困难:


与应用接入方的版本迭代周期不一致,无法及时获得测试环境;


与应用接入方的目标不一致,很难在应用测试周期中增加 SDK 的测试用例;


为了测试 SDK 而特地搭建应用模拟环境,无论从成本,还是收益角度出发都不合适;


的确,无论什么理由,作为 SDK 提供者,当使用者出现问题与异常时,都应毫无理由的给予积极协助,但却隐含着一种恨与悲……


可能大家会问……


出现这种情况,基本都属于监控没做到位,如果做到位肯定一眼就能发现


好一个 “如果做到位”,作为一家快速发展的互联网企业,除了某某某公司之外,又有谁家的监控不是 “一步一踩屎” 爬过来的?在设计当初就能 “掐指一算” 考虑得面面俱到?


也许有人会说,既然这样,干脆把 SDK 移交给应用研发团队自己去维护不就行了


您说的没错,上文提到的这些点,或许可以得到改善,但任何一种选择都会有利与弊之分。


比如 SDK 中通常会包含通用算法、公共方法等较为共享的内容,如果移交,那该有哪个团队接手呢?如果各自维护,那原本基于 SDK 获得的收益又将不复存在,并进入之前的恶心循环了吗?


对于我来说,能做的只是在企业与团队的发展过程中不断的去寻找平衡。或许这种平衡,无论时间多久,也永远,永远,无法找到……


本文转载自头哥侃码公众号。


原文链接:https://mp.weixin.qq.com/s/g7mlGxTlCqsDnl6Am1G1lg


2020 年 4 月 17 日 15:07123

评论

发布
暂无评论
发现更多内容

程序员陪娃漫画系列——当她想吃的时候

孙苏勇

程序员 生活 程序员人生 陪伴 漫画

macOS 查看文件内容常用的命令小结

iHTC

创业的使命是什么

Neco.W

创业 重新理解创业

第一次手动编译openjdk11

py ploughman

jdk

python面向对象的魔法方法详解

半面人

Python

从每个Python文件快速得到项目根目录的绝对路径

良少

Python 路径 绿色

去掉美颜和滤镜后的数字货币

亨利笔记

比特币 区块链 数字货币 DCEP libra

排序系列堆/二分插入

脚动两轮男之漂流小王子

程序员的macOS系列:高效Alfred进阶

iHTC

UITableView 手势延迟导致subview无法完成两次绘制

AlienJunX

第三方支付概述

cf

支付 网联 备付金

排序系列插入/希尔

脚动两轮男之漂流小王子

做一个好产品的初衷:用户值得

池建强

创业 产品 写作

程序员的macOS系列:精选Mac App

iHTC

能够实现的想法才有价值

伯薇

创业 创意 点子 商业价值

开张咯~

李绍俊

生活 随想

在InfoQ上开博的第一天

罗琦

开博 文章链接

详解iOS性能优化,安装包瘦身

Usama Bin Laden

ios 源码分析 性能优化 性能 原理

排序系列之选择/冒泡

脚动两轮男之漂流小王子

Centos 7 使用Firewalld

Kevin Liao

Centos 7 防火墙 Firewalld防火墙 Firewalld

Centos7 编译安装Nginx

Kevin Liao

nginx 编译 安装

如何建立你自己的开发知识体系

iHTC

程序员的macOS系列:Mac开发环境配置

iHTC

LeetCode 1396. Design Underground System

liu_liu

LeetCode

我的编程之路-1(启蒙)

顿晓

编程 入门 启蒙 经历 故事

Centos 7 安装RabbitMQ(RPM)

Kevin Liao

RabbitMQ RPM安装

排序系列计数/基数

脚动两轮男之漂流小王子

排序系列鸡尾酒/地精

脚动两轮男之漂流小王子

排序系列快排/内省

脚动两轮男之漂流小王子

排序系列归并/timsort

脚动两轮男之漂流小王子

排序系列bogo排序

脚动两轮男之漂流小王子

边缘计算隔离技术的挑战与实践

边缘计算隔离技术的挑战与实践

我与SDK之间的爱恨悲欢-InfoQ