惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Last Watchdog
The Last Watchdog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
Y
Y Combinator Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The GitHub Blog
The GitHub Blog
博客园_首页
小众软件
小众软件
I
InfoQ
J
Java Code Geeks
月光博客
月光博客
S
Secure Thoughts
Microsoft Security Blog
Microsoft Security Blog
V
Visual Studio Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Stack Overflow Blog
Stack Overflow Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
N
News and Events Feed by Topic
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
T
Threat Research - Cisco Blogs
A
About on SuperTechFans
H
Help Net Security
MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
人人都是产品经理
人人都是产品经理
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Latest news
Latest news
G
GRAHAM CLULEY
IT之家
IT之家
C
Cisco Blogs
Last Week in AI
Last Week in AI
Engineering at Meta
Engineering at Meta
L
LangChain Blog
The Register - Security
The Register - Security
SecWiki News
SecWiki News
M
MIT News - Artificial intelligence
NISL@THU
NISL@THU
T
Tenable Blog
博客园 - Franky
美团技术团队
I
Intezer
U
Unit 42
雷峰网
雷峰网
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
SegmentFault 最新的问题
C
Cyber Attacks, Cyber Crime and Cyber Security

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19) 使用 Velero 备份 Kubernetes 集群 Kubernetes Cheat Sheet 开发 Tips(18) 如何构建一个 Java 工程 开发 Tips(17) KubeSpray 安装 Kubernetes 报错 ip in ansible_all_ipv4_addresses 基于 Kubernetes 和 Jenkins 搭建自动化测试系统 在 Kubernetes 上动态创建 Jenkins Slave 使用 Jenkins 进行服务拨测 开发 Tips(16) Kubernetes 签发 Ingress 证书及日常故障运维 Kubernetes 中 Deployment 的基本操作 Kubernetes 中的证书 如何使用 KubeBuilder 开发一个 Operator Kubernetes 1.6.0 安装问题汇总 镜像管理工具 -- Harbor 开发 Tips(15) Docker 如何拉取镜像 开发 Tips(14) 使用 Helm 安装 harbor 开发 Tips(13) 使用 S2I 构建云原生应用 在 Kubernetes 中使用 emptyDir、hostPath、localVolume 开发 Tips(12) 开发 Tips(11) 代码质量分析工具 SonarQube 使用 Kubeadm 安装 Kubernetes 集群 一起来学 Go --(4)常用函数 Kubernetes 中的 Ceph Kubernetes 之 Volumes Kubernetes 之 Labels、Selectors 开发 Tips(10) 开源正在重构商业模式 Kubernetes 之网络 Kubernetes 之 API 使用 Helm 和 Operator 快速部署 Prometheus Kubernetes 复杂有状态应用管理框架 -- Operator Kubernetes 的包管理器 -- Helm 一起来学 Go --(3)Go Modules 如何一步一步地优化博客方案 kubectl 实用指南 Kubernetes 中的基本概念 搭建远程 Kubernetes 开发环境 大公司和小公司的 ToB 思路 开发 Tips(9) Go 入门指南 一起来学 Go --(2)数据与逻辑结构 如何预防 Web 富文本中的 XSS 攻击 django-xss-cleaner 云工作时代 一起来学 Go --(1)背景与特点 SaaS 开发团队的不同阶段 你不知道的 Git 使用技巧 输出既服务 微服务设计 继续奔跑 开发 Tips(8) 从账户安全到二次验证 Django 性能之数据库查询优化 Django 性能之分库分表 敏捷开发之研发流程 打造一致性的团队 开发 Tips(7) Pytest 进阶学习之 Mock PaaS 部署之 buildpack Go 开发配置 领域输出才是 PaaS 的核心竞争力 Pytest 入门学习 开发 Tips(6) 如何使用 Jenkins、Docker、GitLab 搭建 Django 自动化部署流程
PaaSer与SaaSer的合作方式思考
微信公众号 · 2017-01-11 · via 陈少文的网站

1. 工作场景

本人所在的小组,20+人的规模,兼具PaaS和SaaS开发的职责。
开发PaaS的人员PaaSer,主要负责PaaS平台的开发和维护,目标是对SaaS开发提供需要的API和文档。
开发SaaS的人员SaaSer,主要负责开发基于上述PaaS平台的Web应用,目标是交付给用户SaaS应用。

关联他们的是,开发者中心、开发框架、Restful风格的API接口、API GateWay。

  • 开发者中心,提供SaaS应用的创建、部署、管理、日志查询、权限配置、入门指南、开发文档等入口。
  • 开发框架,采用的是Django框架,主要对开发、测试、正式三个运行环境进行适配,针对某些常见的漏洞,增强安全性,还集成了一些常用的装饰器和组件模块。
  • Restful API,这部分是扩展SaaS功能重要部分。企业总线主要是由此接入,提供给SaaS使用,组件提供的功能也算在其中。
  • API Gateway, 基于微服务的架构,服务与服务间的通信,需要网关去控制接入策略。这些API,包括敏感权限的API、非原生系统提供的API、某些需要对外服务的SaaS提供的API。最后,API Gateway还可以记录调用Log,统计调用次数。

2. 工作方式

现有的工作方式是,PaaSer负责维护平台的基础功能,同时也负责新功能的开发,比如登录、平台组件等。登录是给每个用户下发票据,有效期内通用于PaaS平台。组件通过API对SaaS提供服务,比如短信、邮件、文件存取等。

PaaS提供的服务,针对的是SaaS的应用开发人员。清晰的API调用逻辑、简洁易懂的说明文档,是平台云服务商成功的关键。PaaSer会提供大量的文档,指导SaaSer对平台功能的使用。

实际上PaaS的API功能,常常不能满足SaaS的需求。比如,需要发送验证码。这时,会使用到PaaS提供的发送短信组件的功能,但是,仍需要SaaS做一层封装才能够满足开发需求。比如,需要对业务权限进行管理。这时,会用到PaaS提供的接口,但是依然无法直接满足开发需求。

久之,SaaS开发人员就会经常拷贝之前自己写过的代码,一部分是对PaaS功能的封装,一部分是业务通用而PaaS平台没提供的功能。这里并不是在指责PaaS平台的开发人员,没有去集成这些功能。我认为,这是缺乏一种功能筛选的机制。这种机制应该能从SaaS功能项中筛选出PaaS平台应该提供的功能。对于整个团队来说,虽然最终交付给用户的是SaaS应用,但是随着开发需求的增长,SaaS开发会被转移出去,沉淀下来的技术和经验应该被固化到PaaS。还有一点就是不能忘记做PaaS的初衷: 降低开发门槛,让SaaS敏捷

我思考的是,怎样去构建这种筛选机制?

3. 如何构建有效的正向机制

正向是哪个向?请看下图。
IaaS、PaaS、SaaS存在一定依赖关系。先有IaaS,然后PaaS,最后SaaS。现在IaaS和SaaS都有比较成功的案例,亚马逊和Salesforce。

这是一个动态的圈。当IaaS服务商,能提供成熟的主机服务之后,就会考虑向PaaS突破。而这里的突破点,就是PaaS中最常用用到的功能项。比如,亚马逊提供的存储服务。直接从PaaS入手,不提供IaaS的服务商,成功的非常少,包括GAE、SAE、XAE等都没有取得很大成功,平台依耐性高、迁移成本大,Salesforce是个成功的案例。而Salesforce是从SaaS的CRM入手的。SaaS的圈子扩张很容易理解,随着越来越多的需求接入,SaaS会越来越大。

PaaS是一个很好的方向。PaaS能黏住用户,具备自动化生产SaaS的潜力。而IaaS提供商门槛低,需要足够的用户群和巨大的基础设施投入。而BaaS之类的服务,可靠性得不到保障,也无法监控,会是PaaS的有力补充。

PaaSer的职能是,输出各种API和文档,而SaaSer的职能是实现具体的功能,交付用户。工作职能的不同,从一定程度隔离了PaaSer和SaaSer。从技术人员成长的角度思考,SaaSer在不断完成PM的KPI,做业务需求的压力下,意识到最终技术会被沉淀到PaaS,会觉得非常的不安。而PaaSer也在绞尽脑汁的思考怎样提供更好、更多的平台功能,但是思路的来源也限于其他云服务平台、内部调研。

没有数据,就不能算是现代科学,精细化的运营开发更需要数据支撑。所以,我想到的是要去记录功能项和使用频次。团队使用的Django框架中,一个Project,是由若干个App组成,很好的对功能项进行了划分。

定义一个SaaS功能项:一个能独立运行、可集成的小项目。第一是要能独立运行起来,第二是可集成,具有独立的标识。所以,需要这几方面的工作:

  • 需要一个注册SaaS功能项与发号系统。 - 部署Django App注册系统
  • 统计使用频次,不用每次使用都远程刷新一次,采用公平的策略即可。 - 统计策略
  • 统一的Django App风格。- Django App创建模板
  • 建立Django App的评星和留言系统,便于及时反馈,筛选优质Djang App。- 评价系统。

4. 机会

  • SaaSer的工作成果可以得到非常快的沉淀。共享的SaaS功能项可以集成更大的SaaS功能项,交付给用户的SaaS应用只是其中的一个集成环节。
  • SaaSer可以分工合作。每个SaaSer实现自己的功能项,然后集成即可。
  • PaaSer有了平台功能目标。根据统计的SaaS功能项,基于平台优化实现,然后与SaaS功能项竞争,可以激励PaaSer。

5. 风险

  • 有些功能项与场景耦合太紧密,影响功能项的独立性,仍然需要修改后才能使用。比如,发送验证码,又需要记录个人信息表的外键。
  • 一个项目下,可能会有很多的功能项。考验开发者的项目组织能力。
  • 功能项的学习成本VS自己开发。粒度不好把握。