关于如何创建一个分布式博客社交平台

如果要你想要维护一个博客,你可能有两种方式可以选择,自建博客网站,或者使用博客平台。

使用博客平台的好处是显而易见的,你不用担心网站的维护,而且你的博客很容易被索引,而且在这种平台上的交流是相互的。

即使如此,还是有很多人更愿意维护一个自己的博客网站,他们也许只是出于对技术的追求,也许是统一的博客平台不能满足他们的需求。

但是要维护一个自己的博客网站,你就不得不面临不能被收录,而且交流被隔离的问题。

所以我希望有一个可以将各个博客平台连接起来的平台,我不希望这个平台像博客平台一样需要账号机制,而且,这些平台实际上也是相互竞争互相隔离的。

那么,我们就需要一个分布式的博客社交平台。

这个平台需要做什么呢?

1.我们希望能够实时的获知关注的人更新了内容(包括文章,但不限于文章),或者关注的文章有了新的评论。

2.另外,我希望对内容的评论不是被分割在不同的网站上的,而是在一个分布式系统上可以检索的。

3.社交最大的好处是我们可以从别人那里获得新的认知,所以我希望大家可以分享自己的关注列表,以及自己对自己关注的人的评价等内容。

那么如何创建一个分布式平台实现上面的功能呢?

首先,如何解决身份认证的问题,分布式系统的认证方法,通常是使用非对称加密,我们也是采用这种方式,你可以使用随机数创建一个你自己的私玥作为身份凭证,同时你需要公布你的公玥供他人验证。

也就是说,我们认为一个私玥代表一个账号,但是使用非对称加密验证的一个问题是,如果你的私玥被破解,你没有任何方式拯救这个账号,所以一个人可以使用多个账号来分担风险,那么我们就不能仅仅使用私玥来做身份证明。

对于一个自己维护博客网站的人来说,他最好要了解https是如何运作的。所以我希望鼓励任何博主拥有一个自己的TLS证书。如果你拥有一个TLS证书,那么你就可以证明你拥有一个域名,而这个域名才是你的身份的象征。所以,你可以同时拥有多个账号,并使用你的TLS证书来声明这些账号属于你。

如果你没有自己的域名和TLS证书,那么最好的办法,就是委托有域名和TLS证书的人帮你加密。你需要现在他的网站上注册你的账号,然后添加你的公玥,这样他就知道这个密钥对是你的了,每次你要发布内容的时候,你需要先用你的私玥将你的内容加密,然后把内容交给你的委托人,他会使用他的私玥把你的内容加密并添加上你的身份信息然后发布出去。

TLS证书任何人都可以使用CA证书进行验证,这很大程度上保证了这个内容是你发布的。

当然,如果你既没有域名也没有委托人,你同样可以发布内容,只是以匿名的身份。

有了身份之后,你就可以发布内容了,不管是文章还是评论的发布都是分布式的。

也就是说,你的内容不会发布到一个公共平台上,而是作为文件保存在你的本地。然后通过广播,通知关注你的人,你发布了新的内容,然后他们就可以通过某种途径将你的内容同步到他们的计算机上进行查看。

你可以发布的内容不仅仅可以是文章,还可以是评论,甚至你的关注,而这些信息都是保存在你本地的区块链上的,你在分布式系统上发布的,只不过是一个区块同步信号,告诉那些关注你的人,你的区块链长度发生了变化。

当然,我不建议直接将内容发布到区块链上,这样会大大增加区块链的体积,虽然每个账户拥有自己的区块链可以极大的减小区块链体积,但是我依然希望你仅仅在区块中发布内容的元数据,这样他们在同步区块链之后就可以通过元数据中的连接访问你的网站。

整个社区使用同一个区块链的好处是所有的信息都是同步的,你可以在区块链上查看到所有的事件,但是这样会导致区块链非常庞大,所以我希望区块链是分散的,你的区块链上只会有你发布的内容。因为你是内容的发布者,也就无所谓会不会篡改区块链上的内容了。你可以随时生成一个新的区块链代替原来的区块链,只是这样,关注你的人就会发现他们已经同步的内容和新发布的区块链并不一致,是否同步你的区块链就是他们自己决定的事情了。

现在你已经拥有你的身份并且可以持续发布内容了,但是大家如何互相认识呢?你可以在你的网站上公布你的身份索引,让你的网站的用户关注你。但是这样大家依然难以互相认识,所以你不仅需要宣传自己,还需要帮助你关心的人宣传他们。我们上面提到了,内容不仅仅是文章和评论,还有你的关注,你可以选择把你关注的人添加到区块链里作为事件广播出去,这样关注你的人就可以关注你关注的人。你甚至可以把给你喜欢的文章点赞,这样别人就可以看到你关注的内容了。

如果想让更多的人认识你,我推荐你多给你关注的人发布的内容点赞或者评论,因为如果对方愿意将点赞或者评论的内容作为事件广播出去,就会有更多的人可以看到你。甚至,你可以到他的网站上告诉他,你关注了他,如果他愿意把关注他的人公之于众,你将拥有更多的曝光机会。虽然人们可以宣称有多少人关注了自己,但是对于一个没有诚信的人,这个数字是没有意义的,因为在分布式系统中,你可以轻松的创建大量的僵尸账号。

也许你已经想到了,一定会有人专门创建一些账号供别人关注,这些账号就会成为你认识新朋友的最佳途径。你可以同步这些账号的区块链,并在他们的账号上搜索你感兴趣的人。

好了,我们已经实现了我们所有的需求。但是我们还有一些问题需要讨论。

如果你要更换你的私玥,你需要使用你原来的私玥发布一个事件,告诉所有关注你的人,你的私玥已经改变,让他们关注你的新账号,你仍然可以保存你原来的内容,只需要使用你新的私玥把内容重建做一遍签名。

如果你的域名发生了变化,那么你需要发一条声明,告诉关注你的人你的域名已经发生了变化,让他知道你的名字已经发生了变化。虽然不发布这个声明他依然会受到你的同步信号,但是他可能会产生困惑,不知道这是你的新名字。

如果你的私玥和域名同时发生了变化,那么你需要通过其他的社交渠道,通知所有人你的账号发生了变化,他们需要重新关注你,并将你的新账号和原来的数据进行绑定。

当然你也可以向向其他信任你的人公布这个消息,让他们帮你发布你的身份发生变化的消息。

只不过收到这个消息的人并不一定信任这条信息。

将上面所有的内容抽象,我们仅仅需要创建一个使用公钥作为id,使用TLS证书加密字符串作为name的分布式身份认证系统。然后我们可以使用这个账号在自己的区块链上添加信息,然后广播区块链长度供关注者进行同步。我们可以发布的信息大致有以下几种:

我声明我的身份(这条信息是所有区块链的根区块,同时也是你的身份标签)

某个人发布了新的内容(你不仅可以宣称你发布了新内容,你同样也可以宣称别人发布了新内容,但是宣称别人发布了新内容的信息必须是有他的签名的。虽然这条经过签名的信息一定会被关注你人同步,但是默认宣称别人发布内容是不会展示出来的。)

某个人删除了某个内容

某个人关注了某个人(你可以宣称别人关注了某人,但是这条信息需要有签名)

某个人取消关注某个人

某个人在某个内容下发布了某个评论

某个人在某个内容下删除了某个评论

某个人赞了某个内容(内容也可以是某个人)

某个人取消了对某个内容的赞

区块可以包含多条信息,所以你并不需要每次发布新的内容都进行打包,你可以创建多条信息然后打包。当然,如果你的网站需要自动化打包,你可以设置一个最大等待时间,当内容在一定时间后没有新变化才会进行打包。