| 编号 | 作者 | 发表时间 | 变更时间 | 版本 | 状态 |
| ----- | ----- | ----- | ----- | ----- | ----- |
| 22110411 | 北野 | 2022-11-04 | 2023-01-13 | v1.1 | 提议 |

## 概述
paopao-ce是一个清新文艺的微社区，提供类似Twiter/微博的推文分享服务。paopao-ce的运营形态有点类似WordPress，只不过WordPress是使用PHP语言开发的博客平台，提供的是博客服务，而paopao-ce提供的是类似Twitter的推文分享服务。paopao-ce 让 **个人或小组织** 可以快速、方便的部署一个提供**推文分享服务**的小站点，在有限范围内形成一个友善的社交小圈子微社区。      
![](.assets/001-01.png)

## 从运维角度思考  

| 实例部署 | 站点部署 |   
| ----- | ----- |   
| ![](.assets/001-02.png)| ![](.assets/001-03.png) |   

部署paopao-ce实例 数据存储需要使用 关系数据库、对象存储、搜索引擎、缓存；paopao-ce支持多实例部署，具体文档请参考[deploy](../deploy/)。
#### 关系数据库
* 本地(Native) -  部署 MySQL/PostgreSQL或者paopao-ce内嵌Sqlite3数据库    
    MySQL/PostgreSQL 可以采用 一主多从+备、一主+备、多主+备 的模式部署，具体部署方式由运维者决定，paopao-ce本身不关心 关系数据库 的部署方式，仅仅使用标准的方式连接关系数据库使用其数据存储服务。
* 云关系数据库 - 部署 云关系数据库      
    阿里云、腾讯云、华为云都提供云关系数据库服务，如何开启服务请参考相应文档进行部署。paopao-ce采用标准方式连接其相应的数据库使用数据存储服务。

#### 对象存储
paopao-ce使用对象存储服务存储 图片/视频/附件 等推文资源。

* 本地(Native) - 部署OBS(Object Blob Storage System)    
    目前开发环境可以使用`localoss`功能提供简单的OBS服务, 也可以自行部署[MinIO](https://github.com/minio/minio)来提供对象存储服务。
* 云对象存储服务   
    阿里云、腾讯云、华为云都提供云对象存储服务，如何开启服务请参考相应文档进行部署。

#### 搜索引擎
paopao-ce目前支持 使用[Zinc](https://github.com/zinclabs/zinc) /[Meilisearch](https://github.com/meilisearch/meilisearch) 提供推文搜索服务，搜索引擎实例的部署请参考相应官方文档。

#### 缓存
paopao-ce目前支持Redis作为缓存存储引擎提供缓存服务，请参考Redis官方文档进行实例部署。

## 从代码实现角度思考
paopao-ce在代码实现上采用 **单体架构模式、分层设计、功能模块化**，架构设计上可能略显保守，但是在使用新技术上却非常积极，比如搜索引擎就采用了近来新星[Zinc](https://github.com/zinclabs/zinc) /[Meilisearch](https://github.com/meilisearch/meilisearch)，同时也不排斥各种云端服务，包括阿里云、腾讯云、华为云的对象存储服务、关系数据库服务等。paopao-ce始终秉持着 **包容并蓄、能用就上、去繁就简** 的架构思维，努力打造一个能 **稳定运行、代码清晰、功能可扩展** 的开源项目。   
![](.assets/006-01.png)

## 从技术探索角度思考
IT世界是非常激动人心的，新技术层出不穷，在各自领域大展身手、大放异彩。作为开发者的我们首要目标当然是以产品为核心，不断的优化服务体验，也不吝啬于新技术的采用以达到更好的产品服务质量。新技术或者某种技术本身，是需要一个环境来支撑其运行、演进，脱离实际环境的技术演进，犹如纸上谈兵，实际效果是存疑的。开发者在研究一项(新)技术时，首先当然是知其然，了解其功能特性、适用场景；再而知其所以然，深入了解其设计原理、知悉其存在的局限等；进而知其不以为然，通过实践，找到技术的最适合场景、知悉其不适合的场景，或与其他技术配合使用，扬长避短，发挥各自的最佳效力以解决具体的事务。这些都是技术探索的通用流程，可以看出，一项技术的探索从陌生到一知半解再到了如指掌，需要一个漫长的过程以及一个技术探索的环境。有些技术的探索，确实需要一个具体的环境，才能更好的研究与实践，比如OBS、Search、Recommended discovery亦或各种云服务的使用、k8s的服务部署等，都需要一个具体的环境来进行技术探索。可以说以需求驱动的技术探索，也更能推进技术本身的不断演进。   
说这么多，这就引出了本节所要说的一个观点了，paopao-ce不仅仅是作为一个提供推文分享服务的产品，也能作为一些（新）技术的探索环境。比如OBS(对象存储服务)、推文搜索服务、推文/用户推荐发现服务、广场推文消息流服务等，都可以作为相应技术领域的技术探索环境，从实践中去检验技术的有效性，更好的推进技术的学习、实践、演进。作为开发者/学习者，也能在理论学习与实际环境中实践(新)技术找到一个平衡，更好、更快的掌握一项(新)技术，这也是paopao-ce的另一价值所在。**路漫漫其修远兮，吾将上下而求索**，用我们开发者的话来说，带着 **上下文(环境/需求)** 去探索（新)技术，或能事半功倍、得心应手。  

## 从人文角度思考
现在的互联网世界已经非常精彩，各种社交媒体平台琳琅满目，使用体验也非常友好。每个社交平台都有自己的运营方式，都有自己的核心用户群体，也有自己的产品灵魂，都在不断的进行生态演进。比如Twitter、微博都已经从最初的推文分享服务演进到一个成熟的传媒平台，注册用户非常庞大，日均访问PV也是一个惊人的数字，这就注定了平台的运营思维是多维度考量均衡的结果，只能做到让用户群体的大多数人用户体验友好，并不能满足所有人的需求。大平台有大平台的运营模式，小站点有小站点的维系空间。对于类似Twitter这样的推文分享服务，paopao-ce提供一种小站点部署模式，采用类似WordPress的运维模式，让 **个人/小组织** 能快速、便捷的拥有一个提供推文分享服务的小站点，以填补那些在大平台下难以享受到的用户体验，享受小圈子内的自由空间。

就像许巍唱的「曾经的你」这首歌中所说:*"曾梦想仗剑走天涯～ 看一看世界的繁华～ 年少的心总有些轻狂～ 如今你四海为家～ ......"* 曾经的你我也在 疯狂刷朋友圈、狂奔微博空间、畅游Twitter世界，但是随着环境的改变、岁月的洗礼、心路的淬炼后，你我可能已经不复当年的热情，逐渐淡出朋友圈、沦为微博的稀客，或许Twitter世界还有点吸引力，但是总感觉表达的欲望不复从前了。是什么原因变成这样的呢，原因可能很多，也各自有自己的不同情形所至于此。但是总归一条，那就是 **自由**; 如果有那么一个有限空间内，可以自由的 **谈天说地、品头论足、唠唠叨叨亦或自言自语**，你我是否又能燃起表达的激情呢？！从这个角度来说，paopao-ce就很契合这种需求，曾经你我想拥有一个自己的博客小站点而使用WordPress，那么今天想拥有一个自己的类似Twitter的推文分享服务小站点，部署paopao-ce或许也是一个不错的选择。 

一个产品应该有一个**属于自己的灵魂**，可以说 paopao-ce的宗旨就是 **打造一个清新文艺的微社区**。

## 疑问

1. paopao-ce主要针对哪些站点运营者？      
其实paopao-ce的运营形态有点类似WordPress，只不过WordPress是使用PHP语言开发的博客平台，提供的是博客服务，而paopao-ce提供的是类似Twitter的推文分享服务。paopao-ce 让 **个人或小组织** 可以快速、方便的部署一个提供**推文分享服务**的小站点，有限范围内形成一个友善的社交小圈子微社区。 
1. paopao-ce是一个清新文艺的微社区，微社区的 `微` 是如何界定的？          
    * 首先从站点用户流量层面，paopao-ce的部署一般针对的是小站点，注册用户不是很多，用户流量(QPS)也不会很高，这种情形本身很契合paopao-ce对自身微社区的服务定位；
    * 从代码实现层面思考，在数据存储层面的架构设计中已经假定paopao-ce提供服务的QPS不会很高，因此不会考虑类似数据库 **分库分表** 这样的设计优化来应对数据库CRUD的流量冲击，对站点推文数据的总容量也假定是单个SQL数据库提供满足查询需求的数据容量极限。
1. paopao-ce在代码实现上为什么采用单体架构模式？    
一个项目的架构设计是多方面考量均衡的结果，最终的目的是满足项目的需求与长远发展。
    * 从架构模式的角度来说，单体架构模式可以满足paopao-ce对自身服务定位的需求，完全有能力承载预期的用户流量QPS，所以采用单体模式架构设计是没有问题的；
    * 从运营者的角度来说，在能保障服务质量的前提下，最看重的还是运营成本的考量。提供一项保质保量的服务，可持续性是评价一项服务的重要指标。单体架构模式的项目部署简单，成本相对于分布式架构模式的项目也更低，架设门槛也没有那么高。*黑猫白猫，能抓老鼠就是好猫*， 在什么阶段就用什么技术，根据部署运营场景选择适合的技术来支撑服务，才是运营者明智的选择。
    * 现在不管是单体架构模式亦或是云原生的分布式架构模式，相应的技术栈生态都已经非常成熟，技术本身没有优劣之分，需要根据具体环境来适配合适的技术，这样才能在你保证服务质量的同时保证服务的可持续性与经济性。说白了就是paopao-ce目前采用单体架构模式的设计，满足优质服务的同时性价比最高。
1. 如果一个paopao-ce部署站点运营一段时间后QPS逐渐提高到一定程度，目前架构的paopao-ce无法满足进一步的用户流量冲击，是否会采用分布式技术栈进行优化？     
不会。paopao-ce将保守的采用目前的单体架构模式提供极致的QPS用户体验，如果确实需要超高QPS需求的实例部署，将另起炉灶开发另一款相应的产品，或许会采用云原生的分布式技术栈生态进行架构设计，这将是另一个paopao产品的故事序章了(前提是paopao能火出圈)。 

## 更新记录
#### v0.0(2022-11-04) - 北野
* 初始文档,先占个位置

#### v0.1(2022-12-17) - 北野
* 添加部署结构示意图

#### v0.2(2022-12-18) - 北野
* 添加部分内容

#### v1.0(2022-12-19) - 北野
* 补充部分内容

#### v1.1(2023-01-13) - 北野
* 补充 从技术探索角度思考 描述
