《⽤户需要什么样的数据库?开箱即⽤的开源数据库发⾏版:搅局者 Pigsty(63页).pdf》由会员分享,可在线阅读,更多相关《⽤户需要什么样的数据库?开箱即⽤的开源数据库发⾏版:搅局者 Pigsty(63页).pdf(63页珍藏版)》请在三个皮匠报告上搜索。
1、户需要什么样的数据库?冯若航开箱即的开源数据库发版:搅局者 Pigsty2022-01-09是 分布式云原湖仓体流批时空超融合HTAP 数据库内核?户需要什么?户需要的是 解决案户 客户机器管理,络规划,安装部署,应接,基础设施,CMDB备份恢复,主从复制,连接池,可,故障切换,负载均衡,服务发现监控告警,动扩缩容,沙箱环境,动部署,安全加固,版本升级,模式变更,数据抽取,平台搭建,审计合规FederatedGeoSpatialTimeSeriesDistributiveOLAPStreamingFDWVIPDCSLoad BalancerMiddlewareDatabaseHA AgentM
2、onitorDNSAccessAlertTSDB DCSPigstyGraphNTPNTPDNSPatroni8008Consul8500Postgres5432primaryPgbouncer64329631PGBExporter9100NodeExporter5433543454365438Haproxy91019630PGExporter5433543454365438vip-managerPrometheus90908500ConsulServer80Yum Repo123NTPDServerDNSMASQ53AlertManager9093Grafana3000MetaDB5432p
3、rimaryhcyapgNginx808600ConsulDNSAnsibleCronjobsNTP/Chronyconsensusvisualizetrafficpeer nodesfiringscrapeexposeregisterconsensussuperviseleaderinquiryadminpoolingidentitymappinghealthcheckmetricsresolveinstalldelegatetime-syncPostgres5432primaryPostgreSQL是个够完美的数据库内核但使数据库内核功能,与架构产级数据系统,是完全不同的两件事什么是解决案
4、?质量价可扩展性可维护性可靠性成本开销钱多 快 好 省什么样的解决案?可靠,可扩展,可维护的完整解决案!(最好还不要钱!)开源免费的开箱即的PostgreSQL完整解决案Pigsty&Redis,Greenplum,etc架构演进A complex system that works is invariably found to have evolved from a simple system that works.The inverse proposition also appears to be true:A complex system designed from scratch ne
5、ver works and cannot be made to work.John Gall,Systemantics(1975)甲视有效的复杂系统总是从简单的系统演化来。反之亦然:从零设计的复杂系统没个能有效作的。架构演进?MasterPostgreSQLSlavePostgreSQL?Golangappapp?MasterMasterChatMasterDeviceMaster-Slave-OfflineCoreGolangChat ServiceGolangModerationGolangAccountGolangPaymentGolangCore ServiceGolangappPos
6、tgreSQLtables?Golang162738495XGolang162738495X?MSChatShard 1MSChatShard 2MSChatShard nMSGiftShard 1MSGiftShard 2MSGiftShard nMSShard 1MSShard 2MSShard nGolang162738495XGolang162738495XGolang162738495XMasterPostgreSQLSlavePostgreSQLSlavePostgreSQLSlavePostgreSQL?OfflinePostgreSQLReplicationGolangappa
7、ppappappETL?优化段从5分的单体裸奔,到10分的成熟企业级系统Postgres5432primary单体数据库$yum install postgresql14*$systemctl start postgresql可靠性:1 蒙眼飙伸缩性:4 性能还 维护性:10 傻也会裸奔状态的单体数据库乎没有可靠性可,很多故障与失误都会造成不可逆的致命打击单体PG的性能上限可观(100TB量级,写4-10W TPS,读取 10-40W QPS)单体PG只需要两条命令即可拉起,维护复杂度极低。备份归档可靠性:3 基本兜底(+2)伸缩性:4 维护性:9 备份管理(-1)Postgres5432pr
8、imarydatabase historytimeline1 week agocold backup 1(base backup)cold backup 2(base backup)1 day agoDelayed Replica(offline instance)1 hour agonowMasterINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEDELETEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEDELETEINSE
9、RTINSERTUPDATEUPDATEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEDELETEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEDELETEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEDELETEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEDELETEINSERTINSERTUPDA
10、TEUPDATEINSERTINSERTUPDATEUPDATEINSERTINSERTWAL Archive基本的冷备份与WAL归档可以显著提数据库可靠性,为各类故障提供兜底机制。冷备份与归档将带来少量额外复杂度,并消耗额外的磁盘空间与各类资源。Pigsty默认启归档,并提供了简单实的全备机制,只需要消耗少量本机存储database historytimeline4 week agocold backup(base backup)Delayed Replica(offline instance)1 hour agonowMasterINSERTINSERTUPDATEUPDATEINSERT
11、INSERTUPDATEUPDATEINSERTINSERTUPDATEDELETEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEDELETEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEDELETEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEDELETEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATE
12、UPDATEINSERTINSERTUPDATEDELETEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEDELETEINSERTINSERTUPDATEUPDATEINSERTINSERTUPDATEUPDATEINSERTINSERT2 week ago1 week ago1 day agoSync ReplicaPrimaryCandidate ReplicaDelayed ReplicaSyncAsyncCandidateServer Roomsyncpg-test-1(primary)Postgre
13、SQLapp1pg-test-2(replica)PostgreSQLapp2pg_receivewalPostgreSQLWAL Archivearchive applydelay=24hpg-test-3(delayed)Cold Backupscold backupper weekretention=4syncwal_retention=1 monthbasebackup_retetion=4(per week,last month)app6pg-test:#Define new cluster hosts:#With 3 instances on 3 nodes 10.10.10.11
14、:pg_seq:1,pg_role:primary 10.10.10.12:pg_seq:2,pg_role:replica 10.10.10.13:pg_seq:3,pg_role:replica vars:#Define business users&databases pg_cluster:pg-test vip_address:10.10.10.2 pg_users:name:test pg_databases:name:test ConfigurtionExecutionpgsql.yml-l pg-test主从复制Postgres5432replicaPostgres5432pri
15、maryPostgres5432replicareplicationreplicationStreaming replicationDatabase可靠性:5 (+2)硬件故障兜底伸缩性:7 (+3)读写分离扩展 维护性:6 (-3)分布式架构管理?MasterPostgreSQLSlavePostgreSQL?GolangappappGolangappPostgreSQLtables?主从复制确保数据不会因为硬件故障丢失,显著提可靠性从库可以提供只读服务,显著提读多写少场景下的可伸缩性。分布式系统维护需要量额外的维护作,系统复杂度显著增加连接池Postgres5432replicaPgbou
16、ncer6432Postgres5432primaryPgbouncer6432Postgres5432replicaPgbouncer6432replicationpoolingConnection poolerStatistic collectorMiddlewareStreaming replicationDatabase可靠性:5 (+0)伸缩性:8 (+1)连接池化复 维护性:5 (-1)额外失效点引连接池,可以幅减少量并发短连接的开销,提系统的可伸缩性。连接池对典型互联使场景有显著优化(千连接可优化为条活跃连接)但会引额外的性能瓶颈与失效点,且需要额外的配置维护作,提了系统复杂度连
17、接池(Transaction Pooling Mode)将上千条客户端连接收敛个位数条活跃服务端连接可可靠性:7 (+2)硬件故障愈伸缩性:8 (+0)维护性:3 (-2)额外组件,DCS依赖Patroni8008Consul8500Postgres5432replicaPgbouncer6432Patroni8008Consul8500Postgres5432primaryPgbouncer6432Patroni8008Consul8500Postgres5432replicaPgbouncer6432Patroni8008Consul8500Patroni8008Consul8500rep
18、licationsuperviseconsensuspoolingconsul/etcd clusterDistributed Configuration SystemDCSLeader electionConfiguration ManagementHA AgentConnection poolerStatistic collectorMiddlewareStreaming replicationDatabase可案使数据库系统在硬件故障时愈,可以显著提数据库库集群的可靠性但引额外组件,依赖外部DCS将导致系统复杂度显著上升典型从库故障现场典型主库故障现场切换影响写:70秒负载均衡Patro
19、ni8008Consul8500Postgres5432replicaPgbouncer6432Patroni8008Consul8500Postgres5432primaryPgbouncer6432Patroni8008Consul8500Postgres5432replicaPgbouncer6432DNSpg-testL4 VIP10.10.10.35433543454365438Haproxy5433543454365438Haproxy5433543454365438HaproxyPatroni8008Consul8500Patroni8008Consul8500replicati
20、onsuperviseconsensuspoolingload balanceconsul/etcd clusterDistributed Configuration SystemDCSLeader electionConfiguration ManagementHA AgentConnection poolerStatistic collectorMiddlewareStreaming replicationDatabaseIdempotent LB that expose services Service are distinguished via portsLoad BalancerL2
21、 VIP managed by vip-managerTied to primary via dcs infoVIPpg-test resolve to VIPor fixed load balancerDNSApplicationAccess via pg-testDistinguish services via port可靠性:7 (+0)伸缩性:8 (+0)维护性:5 (+3)屏蔽主从差异 (-1)额外组件负载均衡器根据集群健康情况动分发流量,屏蔽主从差异幂等的使式极降低了户使时的复杂度,但也会产额外的复杂度监控告警可靠性:9 (+2)遥测故障预警伸缩性:10 (+2)性能分析优化 维护
22、性:3 (-2)基础设施需求Managed by vip-managerTied to primary via dcs infoVIPconsul/etcd clusterDistributed Configuration SystemDCSIdempotent LB that expose services Service are distinguished via portsLoad BalancerConnection poolerStatistic collectorMiddlewareStreaming replicationDatabaseLeader electionConfig
23、uration ManagementHA AgentMonitor5433543454365438Patroni8008Consul8500Postgres5432primaryPgbouncer64329631PGBExporter9100NodeExporter5433543454365438Haproxy91019630PGExportervip-managerDatabaseMonitorservice discoveryleader electionhealth checktrafficpeer nodesmetricsscraperegisterconsensussupervise
24、leaderinquirypoolinghealthcheckconsul/etcd clusterDistributed Configuration SystemDCSConnection poolerStatistic collectorMiddlewareStreaming replicationDatabaseLeader electionConfiguration ManagementHA AgentPatroni8008Consul8500Postgres5432primaryPgbouncer6432consensussupervisepooling监控系统提供了遥测与预警能,可
25、以预先防范多种故障。显著提系统可靠性监控系统可提供关于系统性能的深刻洞察,对于性能改善有显著效果。监控系统将引多种监控组件,与额外的基础设施,导致系统复杂度显著上升。动部署案可靠性:9 (+0)伸缩性:10(+0)维护性:8 (+5)键动部署pg-test:#?pg-test?hosts:#?10.10.10.11:pg_seq:1,pg_role:primary 10.10.10.12:pg_seq:2,pg_role:replica 10.10.10.13:pg_seq:3,pg_role:replica vars:#?VIP?pg_cluster:pg-test vip_address:
26、10.10.10.2 pg_users:name:test pg_databases:name:test pgsql.yml-l pg-test从配置到实现,只要命令#创建出该集群定义套集群,只要代码VIPDCSLoad BalancerMiddlewareDatabaseHA AgentMonitorDNSAccessAlertTSDB DCSPigstyGraphNTPNTPDNSPatroni8008Consul8500Postgres5432primaryPgbouncer64329631PGBExporter9100NodeExporter5433543454365438Haprox
27、y91019630PGExporter5433543454365438vip-managerPrometheus90908500ConsulServer80Yum Repo123NTPDServerDNSMASQ53AlertManager9093Grafana3000MetaDB5432primaryhcyapgNginx808600ConsulDNSAnsibleCronjobsNTP/Chronyconsensusvisualizetrafficpeer nodesfiringscrapeexposeregisterconsensussuperviseleaderinquiryadmin
28、poolingidentitymappinghealthcheckmetricsresolveinstalldelegatetime-sync管控案提供了键动安装部署,集群扩缩容,极降低系统维护复杂度沙箱/多云部署可靠性:10 (+1)仿真与演练伸缩性:10 (+0)维护性:10 (+2)统部署环境Haproxy54335434Pgbouncer6432Postgres5432Patroni8008NodeExporter9100PGBExporter9631PGExporter9630Consul8500meta 10.10.10.10pg_cluster:pg-metapg_role:pr
29、imarypg_instance:pg-meta-1pg_service:pg-meta-primaryHaproxy54335434Pgbouncer6432Postgres5432Patroni8008NodeExporter9100PGBExporter9631PGExporter9630Consul8500node-210.10.10.12pg_cluster:pg-testpg_role:replicapg_instance:pg-test-2pg_service:pg-test-replicaHaproxy54335434Pgbouncer6432Postgres5432Patro
30、ni8008NodeExporter9100PGBExporter9631PGExporter9630Consul8500node-310.10.10.13pg_cluster:pg-testpg_role:replicapg_instance:pg-test-3pg_service:pg-test-replicaHaproxy54335434Pgbouncer6432Postgres5432Patroni8008NodeExporter9100PGBExporter9631PGExporter9630Consul8500node-110.10.10.11pg_cluster:pg-testp
31、g_role:primarypg_instance:pg-test-1pg_service:pg-test-primaryPrometheus90908500DCSServerNginx8080Yum Repo123NTPServerDNS53ServerAlertManager9093Grafana3000Infra pg-meta10.10.10.210.10.10.3pg-testbind on primaryresolve to VIPaccess via DNS10.10.10.1010.10.10.11Service沙箱可在不影响真实户的情况下进系列探索与尝试,提可靠性。沙箱与多云
32、部署持可以提供致的开发,测试,预发,产环境体验,显著提系统可维护性啥?还持Redis和GreenPlum?Redis:RC v1.3Greenplum:Beta v1.4统管理各类常开源数据库组件,深度集成,进步提数据系统可维护性。后续还会继续持多种数据组件:Kafka,Minio,etc,并进步集成异构数据源Fellowship ofLord of PostgreSQLPigsty功能说明视项定位?PostgreSQL?PostgreSQL?PG?PostgreSQL 13/14?TimescaleDB 2.5?PostGIS 3.1?Citus 10?:Patroni 2.1,Pgboun
33、cer1.16,Haproxy 2.2,Consul 1.10?:Grafana 8.3,Prometheus 2.31,Nginx 1.20,Ansible?CMDB?JupyterLab,PostgREST,PGWeb?PostgreSQL?PostgreSQL?Pigsty?,?180+?Kubernetes?PostgreSQL?,?Redis?Pigsty?PostgreSQL?1?2GB?PostgreSQL?CentOS 7?10?DCS?Postgres&Grafana&Echarts&Jupyter Lab?PostgreSQL?(Macbook)?vagrant?virtu
34、albox?ECS/VPS?Prometheus+AlertManager?Grafana?loki?promtail?Pgbadger?Grafana?pev2?30+?1200+?PGSQL?PGCAT?PGLOG?RDS?HashiCorp for Database,RedHat for Linux,Alternative for RDS完整持千万活App运的成熟架构体系,期使真实产环境打磨开箱即的发版VIPDCSLoad BalancerMiddlewareDatabaseHA AgentMonitorDNSAccessAlertTSDB DCSPigstyGraphNTPNTPDNS
35、Patroni8008Consul8500Postgres5432primaryPgbouncer64329631PGBExporter9100NodeExporter5433543454365438Haproxy91019630PGExporter5433543454365438vip-managerPrometheus90908500ConsulServer80Yum Repo123NTPDServerDNSMASQ53AlertManager9093Grafana3000MetaDB5432primaryhcyapgNginx808600ConsulDNSAnsibleCronjobsN
36、TP/Chronyconsensusvisualizetrafficpeer nodesfiringscrapeexposeregisterconsensussuperviseleaderinquiryadminpoolingidentitymappinghealthcheckmetricsresolveinstalldelegatetime-sync持 PostgreSQL 10-14空间地理功能开箱即:PostGIS时序数据功能开箱即:TimescaleDB分布书处理开箱即:Citus打包100+PG态扩展插件带备份归档,主从复制,连接池,负载均衡,可,监控系统,服务发现久经产考验!深度整
37、合PG态FederatedGeoSpatialTimeSeriesDistributiveOLAPStreamingFDW数据库指标数量对PigstypgmonitorpgwatchAWS RDSdatadogAliyun RDS0086999123156621metrics related to database are counted (i.e:node metrics are excluded)顶尖的数据库可观测性,为管理提供详实的数据撑以数据指标数为例,骑绝尘碾压所有竞品监控板公开演示:http:/demo.pigsty.cc顶级可观测性MRI/CT for Da
38、tabases!完善的基础设施与具键安装台机器,条命令,10分钟安装完毕,需互联访问Patroni8008Consul8500Postgres5432replicaPgbouncer6432Patroni8008Consul8500Postgres5432primaryPgbouncer6432Patroni8008Consul8500Postgres5432replicaPgbouncer6432DNSpg-testL2 VIP10.10.10.35433543454365438Haproxy5433543454365438Haproxy5433543454365438HaproxyAppl
39、icationreplicationsuperviseconsensuspoolingactive/backupconsul/etcd clusterDistributed Configuration SystemDCSLeader electionConfiguration ManagementHA AgentConnection poolerStatistic collectorMiddlewareStreaming replicationDatabaseIdempotent LB that expose services Service are distinguished via por
40、tsLoad BalancerL2 VIP managed by vip-managerTied to primary via dcs infoVIPpg-test resolve to VIPor fixed load balancerDNSApplicationAccess via pg-testDistinguish services via portnode-2 10.10.10.12pg-test-2replicanode-110.10.10.11pg-test-1primarynode-3 10.10.10.13pg-test-3replicaAccess Layer常规硬件故障愈
41、从库故障影响主库故障1分钟内完成动故障切换只要任意成员存活集群即可正常对外提供服务。各实例幂等提供类分布式数据库的体验。可集群pg-test:#Define new cluster hosts:#With 3 instances on 3 nodes 10.10.10.11:pg_seq:1,pg_role:primary 10.10.10.12:pg_seq:2,pg_role:replica 10.10.10.13:pg_seq:3,pg_role:replica vars:#Define business users&databases pg_cluster:pg-test vip_ad
42、dress:10.10.10.2 pg_users:name:test pg_databases:name:test ConfigurtionExecutionpgsql.yml-l pg-testpg-test:#Define new cluster hosts:#With 3 instances on 3 nodes 10.10.10.11:pg_seq:1,pg_role:primary 10.10.10.12:pg_seq:2,pg_role:replica 10.10.10.13:pg_seq:3,pg_role:replica vars:#Define business users
43、&databases pg_cluster:pg-test vip_address:10.10.10.2 pg_users:name:test pg_databases:name:test ConfigurtionExecutionpgsql.yml-l pg-test代码定义的数据库HashiCorp for Database!Patroni8008Consul8500Postgres5432replicaPgbouncer6432Patroni8008Consul8500Postgres5432primaryPgbouncer6432Patroni8008Consul8500Postgre
44、s5432replicaPgbouncer6432DNSpg-testL4 VIP10.10.10.35433543454365438Haproxy5433543454365438Haproxy5433543454365438HaproxyPatroni8008Consul8500Patroni8008Consul8500replicationsuperviseconsensuspoolingload balanceconsul/etcd clusterDistributed Configuration SystemDCSLeader electionConfiguration Managem
45、entHA AgentConnection poolerStatistic collectorMiddlewareStreaming replicationDatabaseIdempotent LB that expose services Service are distinguished via portsLoad BalancerL2 VIP managed by vip-managerTied to primary via dcs infoVIPpg-test resolve to VIPor fixed load balancerDNSApplicationAccess via pg
46、-testDistinguish services via port沙箱/多云部署Haproxy54335434Pgbouncer6432Postgres5432Patroni8008NodeExporter9100PGBExporter9631PGExporter9630Consul8500meta 10.10.10.10pg_cluster:pg-metapg_role:primarypg_instance:pg-meta-1pg_service:pg-meta-primaryHaproxy54335434Pgbouncer6432Postgres5432Patroni8008NodeEx
47、porter9100PGBExporter9631PGExporter9630Consul8500node-210.10.10.12pg_cluster:pg-testpg_role:replicapg_instance:pg-test-2pg_service:pg-test-replicaHaproxy54335434Pgbouncer6432Postgres5432Patroni8008NodeExporter9100PGBExporter9631PGExporter9630Consul8500node-310.10.10.13pg_cluster:pg-testpg_role:repli
48、capg_instance:pg-test-3pg_service:pg-test-replicaHaproxy54335434Pgbouncer6432Postgres5432Patroni8008NodeExporter9100PGBExporter9631PGExporter9630Consul8500node-110.10.10.11pg_cluster:pg-testpg_role:primarypg_instance:pg-test-1pg_service:pg-test-primaryPrometheus90908500DCSServerNginx8080Yum Repo123N
49、TPServerDNS53ServerAlertManager9093Grafana3000Infra pg-meta10.10.10.210.10.10.3pg-testbind on primaryresolve to VIPaccess via DNS10.10.10.1010.10.10.11ServiceService Mesh动服务注册服务发现健康检查配置管理DNS可选主异构数据源集成MasterPostgreSQLSlavePostgreSQLSlavePostgreSQLSlavePostgreSQLOfflinePostgreSQLReplicationGolangappap
50、pappappETLPostgreSQL+Redis+GreenPlum+Minio+Kafka集成异构数据库组件,统管理,全链路跟踪,次性解决99%的数据系统需求可扩展性可持各种上层应:Gitlab,Harbor,Jira,Confluence,群晖,友,蝶可于数据分析与可视化:SQL,Jupyter/Python,Echarts,Grafana 可效产出数据应POC:PostgREST动成REST API,Grafana省却前后端开发基础设施功能完备,可于部署管理其他应,甚其他类型的数据库可以完整承载个中上规模互联公司的各类数据库需求搅局者:Pigsty如果船长的终极目标是保护船只,他应该
51、永远待在港。圣托马斯阿奎那神学全(1265-1274)在云厂商的后院放把户痛点贵有说,云商和传统数据库管控软件不吗?可以,但价格并不便宜,有多贵呢?我们使的机型为:Dell R730 48核 384G 内存+3TB PCI-E SSDIDC托管,5年平均TCO为 1.5W/年 规格类似的RDS实例:12W/年规格类似的云主机:312W/年市场优势户如果想使好数据库,通常有三种选择:*购买商业数据库 或 开源数据库的商业管控软件*招聘专业才,例如PostgreSQL DBA运维管理*使云数据库我们提供了第四种选择:把顶尖DBA的秘传经验沉淀为解决案,并在功能、成本,易性与使体验上做到极致,(!)
52、让规模数据库集群的部署实施,管理运维,设计使这种槛很的事情,成为普通研发运维员分钟就能搞定的事情。相云数据库,做到 1/8-1/3 的综合成本与n倍的监控管理使体验。(肩云数据库)(超越云数据库)RDS的成本约为建或基于VPS建的3倍,云RDS是锅饭,功能简陋,远远不如顶尖DBA定制的使体验参考数据:C52M384机型,RDS报价11.7w/年,ECS机器约312w年,IDC托管综合成本1.5w/年(5年报废)参考成本数据:在上世纪80年代和90年代,当GPL被创造出来时,由软件运动的敌是微软和其他销售闭源(”专有)软件的公司。GPL打算破坏这种商业模式,主要出于两个原因:1.闭源软件不容易被
53、户所修改;你可以,也可以不,但你不能根据的需求对它进修改定制。为了抵制这种情况,GPL设计的宗旨即是,迫使公司发布其软件的源代码,这样软件的户就可以研究、修改、编译和使他们的修改定制版本,从获得按需定制计算设备的由。2.此外,GPL的动机也包括对公平的渴望:如果你在业余时间写了些软件并免费发布,但是别它获利,不向社区回馈任何东,你肯定也不希望这样的事情发。强制衍作品开源,少可以确保些兜底的回报。这些原因在1990年有意义,但我(Martin Kleppman)认为,世界已经变了,闭源软件已经不是主要问题所在。在2020年代,计算由的敌是云计算软件(称:软件即服务/SaaS,称络应/Web Apps)即主要在供应商的服务器上运的软件,你的所有数据也存储在这些服务器上。典型的例包括:Google Docs、Trello、Slack、Figma、Notion和其他许多软件,包括云数据库。软件由的敌是谁?云商垄断搅局者打破垄断,维持平衡专注公益,拉下限50天下载量(Github Release)Github Star 数量核指标