跳到主要内容

迈克尔波特的五力分析模型

· 阅读需 1 分钟

分析企业的竞争环境有哪些主要的考虑因素?

新玩家、老玩家、我买的、买我的、其他维度可以替代我的。

竞争力的本质是什么?

不可替代性,即高需求的独特性 (uniqueness in high demand)。

技术领导力雷达

· 阅读需 3 分钟

通常的 engineering rubrics 专注于某个具体的领域,比如 IC (软件工程师、产品经理、设计师) 或者 manager,能否提出一个大一统的框架,以衡量技术工作者的商业影响力?有这样一些要求

  1. 全面
  2. 可执行
  3. 对组建团队有指导意义

我和朋友们的答案

  • Decisiveness 决策力:战略、战术、决断力。为自己或者别人的个人或组织做合适的/赢面最大的决定。搜集信息、诊断以得到 insight、提出有效的策略和执行方案。创新。在机会窗口内/限定时间内/没有所有信息/无法准确预测未来的时候,快速决策,在迭代中改进

  • Execution Engine 执行引擎:打造一个执行引擎而不是执行本身,以有效地影响自己和他人的产出、根据需求精准地调和速度/质量/范围, craftsmenship

  • Domain Expertise:special knowhow, been there/done that, uniqueness

  • People and Culture:Work with others: shaping the world together with people. Lead by example. 团队合作、人力管理、绩效与激励、文化、价值观、能干 + 温暖、心态、热情、自我驱动力、倾听与分享、hiring and coaching team、humility, low ego. best idea wins. growth mindset

  • Product-Sense:好的直觉、对市场和数据的理解、产品管理(包括运营)、项目管理、协同/synthesize、发明与简化、计划与变化、对客户的 obsession

  • Synergy & Resourcefulness: 资源整合力,全局上对客户、渠道、产品、人、技术、资本的网的优化,公司内部结交利益同盟并且有效协调不同组织的 alignment

微服务中的身份验证和授权

· 阅读需 12 分钟

需求

  • 设计一个从简单开始但可以随着业务扩展的身份验证解决方案
  • 考虑安全性和用户体验
  • 讨论该领域的未来趋势

大局观:身份验证(AuthN)、授权(AuthZ)和身份管理

首先,回归基础

  • 身份验证:确定你是谁
  • 授权:确定你可以做什么

在开始时……让我们有一个简单的服务……

  • 分层架构
  • 客户端存储一个cookie或token作为登录状态的证明。(代客钥匙模式)

  • 服务器持久化相应的会话
  • token通常采用JWT格式,由从安全位置(环境变量、AWS KMS、HarshiCorp Vault等)获取的密钥签名

  • 流行的Web框架通常提供开箱即用的身份验证解决方案

然后,随着业务的增长,我们用AKF规模立方体来扩展系统:

  • X轴:水平克隆
  • Y轴:功能分解
  • Z轴:分片

加上康威定律:组织设计的系统反映其沟通结构。我们通常将架构演变为微服务(参见为什么选择微服务?了解更多)

  • 顺便说一句,“微服务与单体”和“多仓库与单仓库”是不同的概念。
  • 对于企业,有员工身份验证和客户身份验证。我们更关注客户身份验证。

在微服务世界中,让我们抽取身份验证和授权服务的功能切片,并有一个身份和访问管理(IAM)团队在进行相关工作。

  • 身份感知代理 是一个反向代理,允许公共端点或检查受保护端点的凭证。如果凭证未提供但被要求,则将用户重定向到身份提供者。例如:k8s ingress controller、nginx、envoy、Pomeriumory.sh/oathkeeper等。
  • 身份提供者和管理者 是一个或几个通过某些工作流(如登录、忘记密码等)管理用户身份的服务。例如:ory.sh/kratoskeycloak
  • OAuth2和OpenID Connect提供者 使第三方开发者能够与您的服务集成。
  • 授权 服务控制谁可以做什么。

身份验证

身份提供者

  • 最简单的解决方案是提交用户的身份证明并发放服务凭证。
    • bcrypt、scrypt用于密码哈希
  • 然而,现代应用程序通常处理复杂的工作流,如条件注册、多步骤登录、忘记密码等。 这些工作流本质上是状态机中的状态转换图。

工作流:用户设置和个人资料更新

Ory.sh/Kratos作为示例架构

2. 第三方OAuth2

OAuth2让用户或客户端经历四个主要工作流(不确定使用哪个?请查看这个),如

  1. Web的授权码授权
  2. 移动的隐式授权
  3. 传统应用的资源拥有者密码凭证授权
  4. 后端应用流的客户端凭证授权

然后最终获得访问令牌和刷新令牌

  1. 访问令牌是短期有效的,因此如果被泄露,攻击窗口很短
  2. 刷新令牌仅在与客户端ID和密钥结合使用时有效

假设在这个工作流中涉及许多实体 - 客户端、资源拥有者、授权服务器、资源服务器、网络等。更多的实体会增加被攻击的暴露。一个全面的协议应该考虑所有边缘情况。例如,如果网络不是HTTPs /不能完全信任怎么办?

OpenID Connect是基于OAuth2的身份协议,它定义了可定制的RESTful API,供产品实现单点登录(SSO)。

在这些工作流和令牌处理过程中有很多棘手的细节。不要重新发明轮子。

3. 多因素身份验证

问题:凭证填充攻击

用户倾向于在多个网站上重复使用相同的用户名和密码。当其中一个网站遭遇数据泄露时,黑客会使用这些泄露的凭证对其他网站进行暴力攻击。

  • 多因素身份验证:短信、电子邮件、电话语音一次性密码、身份验证器一次性密码
  • 速率限制器、失败禁止和异常检测

挑战:电子邮件或短信的送达率差

  • 不要将营销电子邮件渠道与事务性渠道共享。
  • 语音一次性密码通常具有更好的送达率。

5. 无密码

  1. 生物识别:指纹、面部识别、声音识别
  1. 二维码
  • SQRL标准
  • 另一种实现方式:

  1. 推送通知

客户端如何订阅服务器的状态?短轮询、长轮询、WebSocket或服务器推送事件。

4. 市场上的供应商

不要重新发明轮子。

6. 优化

挑战1:Web登录非常慢或根本无法提交登录表单。

  • JS包对于移动Web来说太大
    • 构建一个轻量级的PWA版本的SPA(单页面Web应用)。无论如何使包小 - 例如,preact或inferno
    • 或者根本不使用SPA。简单的MPA(多页面Web应用)与原始HTML表单提交效果很好
  • 浏览器兼容性
    • 使用BrowserStack或其他工具在不同浏览器上进行测试
  • 数据中心距离太远
    • 将静态资源放到边缘/CDN,并通过Google骨干网中继API请求
    • 建立一个本地数据中心 😄

请参见Web应用交付优化以获取更多信息

挑战2:账户接管

挑战3:账户创建耗时过长

当后端系统变得过于庞大时,用户创建可能会分散到许多服务,并在不同数据源中创建许多条目。在注册结束时等待15秒感觉很糟糕,对吧?

  1. 收集并逐步注册
  2. 异步

授权

isAuthorized(subject, action, resource)

1. 基于角色的访问控制(RBAC)

2. 基于策略的访问控制(PBAC)

{
"subjects": ["alice"],
"resources": ["blog_posts:my-first-blog-post"],
"actions": ["delete"],
"effect": "allow"
}

挑战:单点故障和级联故障

  • 预处理和缓存权限
  • 利用请求上下文
    • 假设:数据中心内部的请求是可信的,而外部请求则不可信
  • 失败开放与失败关闭

隐私

1. 个人可识别信息(PII)、受保护的健康信息(PHI)、支付卡行业(PCI)

西方文化有尊重隐私的传统,尤其是在纳粹杀害数百万人之后。 以下是一些典型的敏感数据类型:个人可识别信息(PII)、受保护的健康信息(PHI,受HIPAA监管)和信用卡或支付卡行业(PCI)信息。

2. 差分隐私

仅仅删除敏感信息可能不足以防止与其他数据集相关的数据泄露。

差分隐私帮助分析师从包含个人信息的数据库中提取数据,但仍然保护个人隐私。

3. 去中心化身份

为了将身份与集中式身份提供者及其相关的敏感数据解耦,我们可以使用去中心化身份(DID)

  • 它本质上采用URN格式:did:example:123456789abcdefghijk
  • 它可以从非对称密钥及其目标业务领域派生。
    • 与传统方式不同,它不涉及您的个人信息
    • 请参见DID方法了解其如何与区块链一起工作。
  • 它通过以下方式保护隐私
    • 为不同目的使用不同的DID
    • 选择性披露/可验证声明

想象一下,艾丽斯有一个州政府颁发的DID,想在不透露真实姓名和确切年龄的情况下购买一些酒。

饮酒

一个DID解决方案:

  • 艾丽斯有一个身份档案,包含did:ebfeb1f712ebc6f1c276e12ec21、姓名、头像URL、生日和其他敏感数据。
  • 创建一个声明,表明did:ebfeb1f712ebc6f1c276e12ec21超过21岁
  • 一个受信任的第三方签署该声明,使其成为可验证声明
  • 使用可验证声明作为年龄的证明

总结

本文概述了微服务中的身份验证和授权,您不必记住所有内容才能成为专家。以下是一些要点:

  1. 遵循标准协议,不要重新发明轮子
  2. 不要低估安全研究人员/黑客的力量
  3. 完美是很难的,也不必完美。全面优先考虑您的开发工作

BOZ 个人成长循环

· 阅读需 2 分钟

建筑师通过系统思维对世界进行建模,以优化一切。作为一名工程师和商人,我不断致力于工作与生活的协调,并保持高个人成长率。所学到的经验教训被概括为 BOZ 成长循环。

个人成长循环

BOZ 是一个大循环的缩写,它包含三个小循环:

  • 建造与销售循环。构建产品并销售它们。解决问题并获得报酬。
  • 展望与投资循环。保持极大的好奇心,从事实中寻求真相。优化客户、渠道、人员、技术和资本的网络。
  • 禅 MSEP 循环。保持当下,心怀觉知地做一切。通过运动、睡眠、饮食和与人良好相处来滋养身心。

两种压力来源

压力对人们来说是好事,而痛苦则不是。

  1. 停滞:你在循环的某一步骤中停滞不前。
  2. 摩擦:过多的摩擦阻碍了小胜利的实现。

使用 RACI 和 DACI 明确责任

· 阅读需 2 分钟

当组织规模过大时,谁应该做什么以及谁应该决定做什么变得不明确。RACI 和 DACI 旨在澄清这些责任。

  • RACI:确定谁做什么类型的工作
  • DACI:确定谁决定做什么

这里的假设是,太多项目并行进行,容易失去重点。我们应该更多依赖团队成员之间的相互推动,而不是依赖一个人作为单一故障点。

RACI

RACI 是该模型的首字母缩略词:

  • Responsible(负责):谁负责某些类型的任务?
  • Accountable(问责):哪个人是工作的所有者,并对成功和失败负责。
  • Consulted(咨询):在完成之前,哪些利益相关者应该保持在信息循环中。
  • Informed(知情):谁应该被告知进展情况,尽管他们没有正式被咨询或指导参与项目。

DACI

DACI 是该模型的首字母缩略词:

  • Driver(驱动者):谁在推动决策过程达成结论?
  • Approver(批准者):谁在批准决策。
  • Contributor(贡献者):谁应该对决策做出贡献。
  • Informed(知情):谁应该被告知最终决策?

为什么它们有帮助?

  • 它们使责任和问责变得明确
  • 这些模型引入得越早,它们对项目的帮助就会越长久
  • 它们平衡资源分配,以避免单一故障点或过度疲劳

Dropbox 如何扩展其设计研究

· 阅读需 2 分钟

Dropbox 的设计研究团队从 4 名成员增长到今天的 30 多名。他们如何在团队人数有限的情况下健康地扩展工作?如果研究进行不当,更多的研究通常意味着更多的危害。

扩展过程中面临的主要挑战是:

  1. 未经过培训的研究人员会提出糟糕的问题,误解数据,并做出错误的决策。
  2. 用户研究无论如何都会进行,无论是否有研究运营团队。
  3. 非专业人员应该进行什么样的用户研究,而专业人员又应该进行什么样的研究?

Dropbox 的解决方案

  1. 为无调节研究提供合适的工具。例如:UserTesting、UserZoom、Lookback。
  2. 实际世界星期三。像研究快速约会,5 名研究人员与 5 名用户每人会面 15 分钟。
  3. 提供内部咨询。

如何提供内部咨询?

  1. 文档:物流、模板、隐私和安全、技巧和最佳实践(大量的操作指南)。
  2. 一对一咨询。

结果

  • 对于专业研究运营团队
    • 他们有更多的时间和精力专注于更大的战略项目
  • 对于团队和产品
    • 他们进行更多的研究
    • 他们构建更好的产品
    • 他们受到研究运营团队的阻碍更少
    • 他们更尊重研究运营团队
  • 对于用户
    • 他们获得更多的同理心

风险

  • 仍然,糟糕的研究会导致糟糕的决策。
  • 确保质量很困难。

Dropbox 如何扩大其用户调研的规模

· 阅读需 2 分钟

Dropbox 的用研团队从 4 人发展到今天的 30 多人。在用研团队人数有限的情况下,如何健康地扩大工作规模?如果研究工作做得不当,更多的用户调研通常意味着更多的伤害。

而规模化过程中面临的主要挑战是

  1. 未经培训的研究人员会提出错误的问题,曲解数据,并做出错误的决策。
  2. 不管有没有用研团队,用户调研还是会发生。
  3. 什么样的用户研究应该由非专业人员来做,什么样的用户研究应该由专业人员来做?

Dropbox 的解决方案

  1. 提供合适的工具给未管制的研究.如 UserTesting、UserZoom、Lookback 等。
  2. "真实世界周三"。像速配约会一样,5 个研究员与 5 个用户见面,每人 15 分钟。
  3. 提供内部咨询。

如何提供内部咨询?

  1. 文档:物流、模板、隐私和安全、技巧和最佳实践(大量的 how-tos)。
  2. 一对一咨询

结果

  • 专业的用研团队
    • 他们有更多的时间和精力专注于更大的战略项目
  • 对于团队和产品
    • 他们能够进行更多的研究
    • 他们制造更好的产品
    • 他们被用研团队更少地 block
    • 他们更尊重用研团队
  • 对用户而言
    • 他们得到更多的同情

风险

  • 仍旧是糟糕的研究会导致错误的决定。
  • 很难保证质量。

构建个人基础设施

· 阅读需 7 分钟

为了享受构建软件、媒体和社区的生活作为一个 ==爱好(这里的所有事情与我的工作无关)/ 纯粹的乐趣== - 为什么要构建个人基础设施?有哪些策略和执行方法来发展爱好项目?我目前的进展如何?

一切都从玩耍开始

小学

玩中国版的田宫迷你四驱车

在DOS上玩电脑游戏。

使用Macromedia Authorware进行编程入门

初中

  • 用Microsoft FrontPage建立一个网站来跟踪2003年伊拉克战争
  • 在数字字典上用QBasic制作一个文本游戏

然后你可以在堆满教科书的教室里玩 :)

高中

  • 用乐高Mindstorm RCX为FIRST乐高联赛挑战赛构建
乐高机器人挑战

大学与研究生院

  • 使用SQL注入为我的室友的学校餐卡增加20元人民币的积分。然而,两天后,他们被收银员叫了……哈哈。

  • 嗅探一个有声读物应用,然后基于其API,构建自己的Android应用以获取免费音频。

为什么编程有趣?

… 制作复杂的拼图般的互锁移动部件并观察它们在微妙的循环中运作,体验从一开始就内置的原则所带来的后果的迷人之处。

— 《神话般的人月》

好吧,这很有趣。爱好与个人基础设施有什么关系?

  • 建造者无论如何都是为自己建造的。为什么不与他人分享呢?
  • 建造者无论如何都会建造东西。为什么不把它们做大呢?

同时,我遇到了一些令人震惊的文章。

我得出结论:

  • 亚马逊的飞轮是为高固定成本和优化规模回报的商业而构建的。
  • 我的生活有高固定成本(有限的时间和精力),在这种情况下,规模经济是值得追求的。
  • 我可以通过强大的个人基础设施获得随着时间推移而逐渐增加的优势,达到超出我想象的成就。

此外,我从之前的PMF前创业经验中获得了一些启示

  1. 寻求以留存为先的数据驱动增长。Sean Ellis:“关注客户获取而非‘知名度’需要纪律……在某种规模下,知名度/品牌建设是有意义的。然而,在头一两年,这完全是浪费钱。”
  2. 基本条件就是基本条件。你不需要风险投资来构建初始产品。点子只是点子。建立你的团队,构建你的产品,并与人合作。

发展个人基础设施策略

执行

这是我爱好项目的架构。

技术栈

技术:React、React Native Expo、GraphQL、KOA、TypeScript、AVA、Webpack、Airflow、MongoDB、Python Pandas和Flask、Svelte、Metabase、Golang等。

服务器和API:Heroku、DigitalOcean、Azure、AWS、Github Pages、BunnyCDN。

成为早期采用经过验证的新技术的主流

系统架构

专注于构建,而不是浪费时间在SRE上

示例1

示例2

“这个架构不是未来-proof的!/ 不可扩展!”

好吧...

  • 服务大多是无状态的,水平可扩展
  • 服务协作是一个问题,但你无论如何都必须在与不同的人合作和实现个人IaaS(可单独出售)时将它们隔离。
  • 始终可以演变为Kubernetes。

个人根指标

过上平衡的生活,保持一切正常,通过数据进行衡量

“以留存为先增长”的关键指标是用户群分析。

参考基准:

行业第1天第7天第30天
2C402010
电子商务35155
游戏3015<5
教育科技25105
  • 值以百分比为单位

结果

产品

  • Beancount.io:轻松实现双重记账,过上最佳财务生活
  • touchbase.ai:个人CRM:聪明地参与更有意义的关系
  • coderoma.com:每天一个编码挑战

框架

  • onefx.js.org:快速高质量构建Web和移动应用

帮助我的朋友的项目从零开始

  • CocuSocial: 发现不同的饮食和饮品体验
  • 帮助我在IoTeX的日常工作中构建质押门户、区块链浏览器、桌面钱包等。
  • 更不用说其他一些失败的项目了...

媒体:

社区:

  • github.com/puncsky/system-design-and-architecture

我可以使用你的项目或加入你的社区吗?

👍 当然可以,欢迎!它们大多是开源的或开放注册。感谢您成为我们尊贵的客户或社区成员!

👏 非常感谢您的反馈!

❤️ 喜欢吗?请查看此文章 https://tianpan.co 并在 https://twitter.com/intent/follow?original_referer=https%3A%2F%2Ftianpan.co%2F&region=follow_link&screen_name=tianpan10x 上关注我 :)

德鲁克的七个创新之源与四个创新战略

· 阅读需 8 分钟

为什么有些人想要通过成为企业家挣钱?因为他们想打败市场——以低于市场的成本,获得超出市场的回报——即获得高于市场的利润率。而超出市场的价格源自产品或者服务的稀缺性/独特性,想要有独特性就必须创新,所以,想要成为企业家必须至少是创新者。

大多数的公司之所以可以成功,都是因为他们知道如何持续地在对的事物上受到启发,持续地产生新想法。如何辨别最合适的创新之源,以战胜对手,从产业中脱颖而出?

七个创新之源

  • 内部

    • 意外之事:比如面对家用电器的购买量的突升,梅西限量销售,而 Bloomingdale's 利用这个机会扩充了电器部门,从而提升了利润。

    • 市场和行业的发展:比如汽车市场全球化的时候,沃尔沃也跟着全球化,从而比没有快速全球化的雪铁龙做得好。

    • 流程中薄弱的环节:医药销售商William Connor在意识到了眼科手术的一个麻烦环节 : 眼韧带出血。所以他建议用酶溶解韧带代替切割韧带,这大大减少了手术风险,并被眼科医学领域广泛接受。这次针对短处的革新使他的公司获得了极大的利润。

    • 现实与感知之沟(难道 TK 也是德鲁克的使徒?):比如轮渡货运早年误以为缩短时间的关键在于提高航行速度,但实际上这样做会导致成本剧增,问题的关键其实在于降低船闲置在港口的时间。

  • 外部:比如政治、学术、科学

    • 社会观念的变化:对于环保和高科技的趋之若鹜让电车市场火热。
    • 人口结构变化:比如中国数字原住民的增多和对线上社区的需求催生了 Bilibili。
    • 新知识的杂交:比如计算机是数百年来数学、电子、编程技术的杂交产物。

大小公司都需要创新

一个新起步的公司需要具体目标和计划,具体见打造公司的五个阶段

在创业初期,企业家应该要在尝试不同领域后,找到合适的市场。因为很有可能你会在一个你从未想过的领域最终创业成功。第二步则是确立好正确的财政重心。保证公司在遇到问题时有足够的解决资金是极其重要的。最后一步是为公司建立一个可信赖的管理团队。这个团队应该要在公司团队壮大之前就完善起来。

不仅是小商人需要改革创新,大产业也同样需要注入新鲜的血液。初始阶段,他们应该标准化企业内铸新淘旧的规则。其次,革新后的项目由全新的负责人管控。最后一点是,企业应该要设置褒奖机制,这样可以帮助提高员工的生产表现,并有效回顾创新的效果。

四个创新战略

孤注一掷(Fustest with the mostest)

一个有智慧的企业家应该目标成为该行业的先行者,倾其所有敢为人先。Hoffmann-La Roche 拥有一个小的化工公司,但他机智地发现了维生素行业的商机。所以为了生产和销售维生素,他投资了一大笔钱雇了许多专家。虽然听起来十分有风险,但这次“赌博”最终有了好结果,他在60年间都是维他命行业的领军者。

攻其软肋 (Hit them where they ain’t)

发现对手注意不到的漏洞是十分不容易的,但有两种方法可以实现。第一个是用更新颖和吸引人的手法模仿对手的想法。举个例子,IBM 公司模仿对手 ENIAC 电脑公司的想法,并在此之上加以更创新的点子,最终从中获利。不仅如此,有些公司还可以通过痛击对方的短处而赢得胜利。这对于目中无人的大公司尤其奏效。

生态位 (Ecological Niches)

这原本是一个生物学概念:生态位是一个物种所处的环境以及其本身生活习性的总称。每个物种都有自己独特的生态位,借以跟其他物种作出区别。

一个公司如果专攻于不可替代的领域,则更容易成功。一个很好的例子就是 William Connors 开发的酶类。这类酶在后来成为了消除白内障手术中至关重要的一步。但是值得注意的是,这个公司也有很可能在对手研发出可替代的药物后,失去在该产业中的绝对优势。

变价值和特征 (Changing values and characteristics)

为了增加对于你的产品的需求量,你不一定需要改变产品本身。相反,找到一个更符合消费者利益的方法可能是更重要的。企业家应该要了解是什么让消费者愿意买单。举个例子,吉列公司之所以剃须刀免费、刀片付费,正是因为当时该公司意识到,消费者根本不愿意花高于刮胡刀本身得钱买刀片。

解决公司间支付问题的初创公司 Routable

· 阅读需 1 分钟

公司间支付流程繁复,需要与各种不同的系统,尤其是记账软件整合。Routable 致力于帮 middle market (companies with 100m 100m ~ 500m in revenue) 解决这个问题。Routable 的特色在于,它既帮你管理工作流,也帮你管理钱的实际流动。最近账单管理的初创公司有点火,要不要买点 bill.com 的股票呢?