WordPress如何同步多个站点

1) asp看别人的代码然后根据他的流程自己学者模仿一个

2) Frontpage就可以了

3)我用了两三天吧,但是我当时是学会了VB的

4)不涉及算法*难的是版面设计

5)看别人的代码然后根据他的流程自己学者模仿一个

技术要求:

(1)基本知识:知道B/S模式工作原理,有B/S模式的概念。

(2)开发环境:会使用IIS、FrontPage(或Dreamweaver)写静态和动态的网页,会调试。

(3) HTML:能读懂HTML代码,知道各个标签的含义(html, head, body, title, script, a, front, div, table, thead, tbody, tr, td, th, img, input, button, select, option, textarea, meta)。不需要会手工编写,但能在用工具软件编完的代码视图基础上添加、删除、修改HTML代码。*好能够连CSS也会用。参见《XML编程技术大全》选修课课本2、3章或其他书籍。建议研究、修改一下XML选修课课件的代码。

(4) ASP:能用ASP进行结构化编程(顺序、循环、选择结构)。能知道ASP程序要在HTML代码的什么位置添加。能运用ASP语法。能使用request和session操纵信息。能使用response对象的redirect、write、end方法。能够把从一个网页提交的数据在下一网页得到并显示出来。使用ADODB组件读写、编历数据库。

(5) JavaScript:能够把一下内容运用在HTML标记的onclick属*中:window.open、window.close、innerHTML、getElementByID、getElementByName、history.go、history.back。

(别看上面的要求很多,但是学起来很快的。按照(1)~(5)的顺序学,我没说的不作要求,重在实践!先期比较苦,但有成效。)

我有当时我们做的一个新闻发布系统,教程,小作业和一些有用的资料,你可以留下你的邮箱,我发给你。

你好呀,我是动作缓慢的程序猿。

元旦的时候我看到一个特别离谱的谣言啊,具体是什么内容我就不说了,我怕脏了大家的眼睛。

但是,我看到一个群里传的那叫一个绘声绘色,大家讨论的风生水起的,仿佛大家就在现场似的。

这事吧本来我呵呵一笑也就过了。但是隔了一会我突然大腿一拍:这是个素材啊。

我可以和大家聊一个共识算法呀。

说到共识算法,大家首先想到的应该都是 Raft、Paxos、Zab算法这类理解起来比较困难的强一致*算法。

但是还有一个弱一致*的共识算法比较好理解,Gossip协议。

Gossip,先看这个单词,圈起来,要考的啊,这是一个六级词汇,也是考研单词,意思是“流言蜚语”。

接下来就带你简单的看看这个“流言蜚语”到底是怎么回事。

Gossip协议

Gossip协议*早提出的时间得追溯到 1987年发布的一篇论文:《Epidemic Algorithms for Replicated Database Maintenance》

我**次看到这个论文的名字的时候,我都懵逼了:这也没有 Gossip的关键词呢。

主要是 Epidemic Algorithms这两个单词,我又恰好认识。

Algorithms,算法,没啥说的。

Epidemic是啥?

紧扣当下时事:

所以 Epidemic Algorithms翻译过来就是流行病算法。

因此 Gossip的学名应该是又叫做“流行病算法”,只是大家更喜欢叫它 Gossip而已。毕竟,虽不喜欢听点儿“小道消息”呢?

说论文之前,先简单定个基调。

你觉得一致*协议*基础、*核心、*重要的一个动作是什么?

是不是数据更新?

为了保证各个节点的数据的一致*,必然就涉及到数据的更新操作。

所以,在论文的开篇介绍部分描述了三种方法来进行数据的更新:

Direct mail(直接邮件)

Anti-entropy(反熵)

Rumor mongering(传谣)

Direct mail(直接邮寄)

废话先不说了,直接上个图:

上面这图啥意思呢?

就是一共八个小圆点,假设每个都代表一个服务器,它们之间都是平等的关系,不存在中心节点、主从什么的关系。

其中*上面的红色节点表示该节点有数据变更了,于是把变更的数据直接通知给剩下的节点。

如果其他的节点上发生了数据变更也是同样的道理。

可以简单的理解为一个循环遍历,每发生一次数据变更,为了保持数据的一致*,就得进行一次循环遍历。

这个方案的优点很明显:简单、粗暴、直接。

但是缺点和优点一样明显,我们看看论文里面怎么说:

主要看 but的部分:

首先不完全可靠,因为这个要求每个站点都必须知道所有站点的存在。但是实际情况是有的站点并不总是知道所有其他站点。

然后,信息(mail)有时会丢失,一旦丢失,就连*终一致*也保证不了,整个凉凉。

其实 Direct mail(直接邮寄)并不是论文里面主要讨论的方案,把它写在**个起一个抛砖引玉的作用。

主要聊聊 Anti-entropy(反熵)和 Rumor-Mongering(传谣)这两个方案。

先定个整体的基调:

Anti-entropy(反熵),是传播节点上的所有的数据

Rumor-Mongering(传谣),是传播节点上的新到达的、或者变更的数据

说白了,一个是全量,一个是增量。

Anti-entropy(反熵)

部分同学可能对“反熵”这个词感到莫名其妙哈,其实主要是不了解啥是“熵”。

其实说白了,“熵”的通俗理解就是“混乱程度”。

比如你的房间,如果你不去整理那么各自物品的摆放就会越来越混乱,也就是越来越“熵”。而你整理房间的这个操作就是“反熵”。

这个东西你可以简单的先这样理解,我一时半会也给你说不清楚,这东西要聊下去的话得上升到宇宙和哲学的高度。

我主要怕你听不懂。

在论文里面是这样的描述 Anti-entropy模式的:

每个服务器有规律地随机选择另一个服务器,这二者通过交换各自的内容来抹平它们之间的所有差异,这种方案是非常可靠的。

(but开始了)但需要检查各自服务器的全量内容,言外之意就是数据量略大,因此不能使用太频繁。

实验表明,反熵虽然可靠,但传播更新的速度比直接邮件慢得多。

如果不同步,那么两者之间的数据差异越来越大,也就是越来越熵。

同步的目的是缩小差异,达到*终一致*,这就是反熵。

定义就是这么个定义。

Rumor mongering(传谣)

比起反熵,传谣从字面上就很好理解了。

比如我是一个大学生,并不能完全认识整个学校的人。但是学校里面的同学之间都有千丝万缕的联系。

假设有一天,我刚好碰见校花一个人走在路上,我就上去和她讨论了一下计算机领域里面的共识算法等相关问题,关于这些问题我们进行了深入的讨论并且交换了彼此的理解和看法。

咱这边就是说,整个过程是越讨论越激烈,不知道怎么走着走着就走到了情人坡。

应该每个大学都有一个叫做情人坡的地方吧。

然后被别的妹子看见了。她就给她闺蜜说:你知道歪歪吗?对,就是大一新生,那个大帅比。我那会看到他和校花在情人坡那边溜达。

然后一传十、十传百。这个消息全校师生都知道了。

“歪歪和校花在情人坡那边溜达”这个消息就通过 gossip的传谣模式,达到了*终一致*。

“传谣”和“反熵”的差别在于只传递新信息或者发生了变更的信息,而不需要传递全量的信息。

比如上面的这个例子中,只需要同步“歪歪和校花在情人坡那边溜达”这个**的消息就行。

而不需要同步“歪歪是谁,校花是谁,情人坡在哪”等等这些之前大家早就达成一致*的信息。

在提到“传谣”和“反熵”的时候,论文中还有这么个定义:

simple epidemics:单纯*传染病

在这种模式下,包含两种状态:infective(传染*)和 susceptible(易**)。

处于 infective状态的节点代表其有数据更新,需要把数据分享(传染)给其他的节点。

处于 susceptible状态的节点代表它还没接受到其他节点的数据更新(没有被**)。

所以,后面我提到“**”的时候,你应该要知道我是从这里看到的,不是胡编的。

关于“传谣”和“反熵”,再借用周志明老师《凤凰架构》里面的正经一点的描述,是这样的:

达到一致*耗费的时间与网络传播中消息冗余量这两个缺点存在一定对立,如果要改善其中一个,就会恶化另外一个。

由此,Gossip设计了两种可能的消息传播模式:反熵(Anti-Entropy)和传谣(Rumor-Mongering),这两个名字都挺文艺的。

熵(Entropy)是生活中少见但科学中很常用的概念,它代表着事物的混乱程度。

反熵的意思就是反混乱,以提升网络各个节点之间的相似度为目标,所以在反熵模式下,会同步节点的全部数据,以消除各节点之间的差异,目标是整个网络各节点完全的一致。

但是,在节点本身就会发生变动的前提下,这个目标将使得整个网络中消息的数量非常庞大,给网络带来巨大的传输开销。

而传谣模式是以传播消息为目标,仅仅发送新到达节点的数据,即只对外发送变更信息,这样消息数据量将**缩减,网络开销也相对较小。

一个网站

摊牌了,其实我是看到了这个网站,才决定写这篇文章的。

因为这个网站里面直接有非常**的动画模拟 gossip协议的同步过程,一个动图胜过千言万语。

地址先放在这里,大家可以自己访问玩儿一下:

先给你看一眼它的工作过程:

甭管看没看懂吧,这玩意至少看起来很厉害的样子。

接下来就给你介绍一下它是怎么玩的:

首先我们看这里的 Nodes和 Fanout。

Nodes其实很好理解,就是节点数,这里的 40就代表下面的小圆圈的个数,比如我今年 18岁,那么我把它改成 18它就是这样的:

主要是这个 Fanout是个啥玩意呢?

在这个网页的头部的轮播图里面,**张图是这样的:

答案就藏在这个 Learn more里面。

这段话里面就解释了,什么是 Fanout。同时也简单的介绍了 gossip协议的基本工作原理。

它说 gossip协议在概念上非常简单,编码也非常简单。它们背后的基本想法是这样的:

一个节点想与网络中的其他节点分享一些信息。然后,它定期从节点集合中随机选择一个节点并交换信息,收到信息的节点也做同样的事情。

该信息定期发送到 N个目标,N被称为扇出(Fanout)。

所以,前面的 Fanout=4,含义就是某个节点,每次会把自己想要分享的信息同步给集群中的另外 4个节点。

在模拟器中体现出来应该是这样的:

上面这个图你可以看到有很多线,但是它们的起点都是一个红色的节点。

这个红色的节点就是你用鼠标随意点击小圆圈中的一个或者多个都可以,鼠标一点击就会变成红色,就是完犊子了,红码了,表示“被**”了。

上面的线条是怎么搞出来的呢?

有了一个红色的小圆圈之后,点击上面的“Show Paths”就会出现路径了:

但是不是说好 Fanout=4吗,为什么怎么多的路径?

因为,虽然这个节点知道这么多其他节点,但是它只会选择其中的 4个进行**。

上面这个图还是有点复杂,所以我把参数都调小一点,这样看起来就清*多了:

集群中有一个节点的信息更新了,这个节点知道其他 5个节点的存在,但是它只会把信息推送给其中的两个,点击 Send Message按钮之后就会像是这样:

你可以发现上面这个图里面已经有三个红色的节点了,有两条路径变粗了,含义是从这个路径传播过来的。

整个集群*终会全部完成“**”,达成*终一致*:

同时,gossip协议它也具备容错*:

按照页面上的提示,我们是可以通过“Delete”按钮删除一部分路径的,比如下面这样:

删除两个路径,代表这几个节点之间是不可达的,但是*终这个集群还是会全部被**。

再来个动图演示一下,可以看到路径删除后,这个节点再也不会给对应的节点通讯,但是整个集群还是达到了收敛:

你自己也可以打开网站去玩一下,还有一个小技巧是这样的:

点击 Play按钮,是可以随时暂停的,这样就更容易观察到整个传播的过程。

*后,关于这个图里面,还有一个关键的东西没有说,就是里面的这个公式:

在 Learn More里面也有提到这个公式,其实它就是 gossip协议的复杂度,O(logN):

比如,每次都设置为 Fanout=4,那么节点数和预估传播轮次之间的关系是这样的:

40个节点,2.66轮

80个节点,3.16轮

160个节点,3.66轮

320个节点,4.16轮

640个节点,4.66轮

...

可以看到,随着节点数的翻倍增加,传播轮次并没有明显的增加。

这就是前面 Learn More截图里面提到的这个词:Scalable

这是个四级词汇啊,会考的,记住了,是“可伸缩”的意思。

采用 gossip协议的集群,Scalable is very的 nice。

其他注意点

在这个网站上,*重要的就是它的动图模拟功能了,但是也不要忽略了它里面的其他部分的描述。

比如这一段话,我就觉得非常的重要。

这一段话里面提到了两个问题,我一个个的说。

首先它说在网站模拟的过程中,所有节点发送消息似乎都是同步的,就像有一个全局循环一样。

在模拟中这样做,是因为这样看起来更加的直观。

但是,在一个真正的 gossip协议中,每个节点都有自己的周期,它们之间根本没有也不需要同步。

上面是说什么意思呢?

我再说的直白一点,每个节点往外同步消息的时候,是按照自己的周期来处理的,比如每 10秒一次。根本就不关心其他节点什么时候触发同步消息的操作,只需要管好自己就行了。

第二问题我认为就很重要了:

How do the nodes know about each other?

节点之间怎么知道其他节点的存在的?

其中一个方式就是当节点加入集群时,必须知道该集群中的一个节点的信息。通过前面的动图我们知道,如果一个节点被另外一个节点知道,那么它*终也一定会被**。

那问题就来了:新节点加入时又是如何知道集群中一个节点信息的呢?

很简单,我知道的一个方案就是人工指定。

Redis集群采用的就是 gossip协议来交换信息。当有新节点要加入到集群的时候,需要用到一个 meet命令。

这玩意就是人工指定。

还有一个可以注意一下的是这个:

这里提到了另外一个模拟的网站:

它可以通过控制这几个参数,来测算集群达成一致*的时间。

上面这个图表示的就是在信息交换频率(GOSSIP INTERVAL)为 0.2s,Fanout节点数为 3,总节点数为 30,丢包率和节点失败率为 0的这个情况。

在这个情况下,对应的到达*终一致*的时间图长这样:

基本上在一秒的时间就搞定了。

你也可以自己去修改一下参数,看看对应的时间图的变化。

比如,我只修改节点数,把它从 30修改为 3000,时间图变成了这样:

在 1.75s左右完成了收敛。

节点扩大 100倍,但是时间增加不到 1s,确实是很**。

这玩意好是好,但是给你看个刺激的,来感受一下这**的传播规模:

从动图中可以看出,前面一两次传播还好,至少眼睛还能看出个大概,但是到了后几轮,大多数节点都被**了,但是还在继续对外传播消息。

这消息数量,简直是看的让人头皮发麻。

六度分隔理论

*后再说一个有意思的东西,叫做“六度分隔理论”:

1967年,哈佛大学的心理学教授Stanley Milgram想要描绘一个连结人与社区的人际连系网。做过一次连锁信实验,结果发现了“六度分隔”现象。简单地说:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,*多通过六个人你就能够认识任何一个陌生人。

六度分割理论,也叫小世界理论。这其实和 Gossip协议也有千丝万缕的联系。

我在小破站上看到一个相关的视频,我觉得解释的还是挺清楚的,你如果有兴趣的话可以去看看:

在视频里面,有这样的一个画面:

好家伙,这不是我们前面的网站上面的翻版嘛,看起来可太亲切了。

这个理论刚刚提出来的时候还是“*多通过六个人你就能够认识任何一个陌生人”。

但是随着这几年社交网络的急速发展,地球都被拉小到了一个“村”的概念了。

所以这个数字在逐渐的减少:

而且如果把这个范围拉小一点,比如局限在程序员这个小范围内,那就更小了。

有时候拉个业务对接群,进去一看好家伙还有前同事,你说这个圈子能有多大。

本文已收录到个人*客,欢迎大家来玩。

WordPress多语言网站插件– Polylang

插件中心搜索polylang并安装

创建语言

Polylang有 50种预定义的语言,在设置菜单里,找到语言,从下拉菜单里选择想要添加的语言的名称,然后点击添加语言。

如果你想要的语言没在列表里,或者你不想要默认的设置,你可以自己修改,每种语言都有 5个字段。

全名:在网站上显示的语言的名称,比如:English,Français,简体中文,繁体中文。

区域设置:用在 WordPress上的语言代码,必须填写跟 WordPress区域设置一致的代码,不然主题翻译就不能正常工作。一般由两个小写字母,一个下划线,再加上两个大写字母组成。例如:en_US,fr_FR,zh_CN。不过也有一些区域设置只用两个或三个小写字符,比如:ar,el,ckb。

语言代码:这个代码会用在 URL上,*好使用两个小写字母的 ISO 639-1语言,比如:en,fr,cn...

文字方向:一般的语言都是从左向右阅读,不过也会从右向左阅读的语言(阿拉伯语,希伯来语)。Polylang会告诉主题使用 LTR还是 RTL样式。注意并不是所有主题都支持两种文字方向(默认的 2011,2012主题支持)。

排序:在语言切换工具上显示的语言的顺序。

记得点击添加语言按钮,可劲儿添加,因为没有限制。Polylang会自动为你下载语言文件。

Polylang还会试着去下载默认的 2010,2011,2012这些主题的语言文件,如果也没下成,可以使用上面的地址手工下载,然后放在/wp-content/themes/your_theme/languages目录下。

设置

默认语言:当有人**次访问你网站首页的时候使用的默认的语言。

要是安装 Polylang在已有的网站上,会出现红色字儿的提示:有些文章,页面,分类或标签还没有设置语言,你想把它们设置为默认的语言吗?你可以点击这个快速设置所有已有的文章,页面,分类,标签的语言。同样适用于自定义内容类型,自定义分类法。注意不会修改文章,页面,分类或者标签的 URL。

检测浏览器语言:勾选以后,如果有人**次访问你的网站的首页,网站的语言会根据用户的浏览器的设置来设置。如果网站的语言里没有用户浏览器的语言,那么就会使用默认的语言。

URL修改

重要的选择:

从内容设置语言:Polylang尽可能不修改 URL,默认,只有需要的时候才添加语言信息到 URL上(主要是规档),不需要就不会添加(文章,页面,分类,标签)。这样即便禁用了这个插件,大部分重要的链接也不会受影响。

语言代码:例如:/en/,当使用简洁链接时会添加到所有 URL上。这样如果禁用了这个插件,每个 URL都会遗失语言信息,也就是所有的 URL链接都会被破坏。

其它控制 URL的相关选项:

在简洁链接中保留/language/:月度规档的 URL就会是这样:

从简洁链接中移除/language/:月度规档的 URL会是这样:

为默认语言** URL语言信息,这样只有默认的语言会**语言信息,那么默认语言的月度规档的 URL看起来是这样地:

重定向语言页面到首页:不使用静态首页的话,这个选项是没有用的。例如,首页 URL看起来是这样:

控制语言与翻译的更多选项:

媒体:翻译媒体的标题与描述。

同步:创建文章与页面的翻译时可以避免重复动作,比如设置分类与标签,特**像,父页面等等。你可以选择到底用不用同步。如果网站上有自定义内容类型或者分类法的时候,你也可以选择使用语言与翻译。*后别忘了点保存更改按钮。

主题的国际化( i18n)与本地化( l10n)

这步很重要,不然你的主题在显示文章或页面的时候不会显示翻译。要跟主题的作者确认一下主题是不是国际化(是否可翻译)还有本地化(已经翻译)了你需要的语言。了解更多可以参考本站的《 WordPress主题开发》课程。

检查主题的 header.php是否有类似的代码:

<html<?php language_attributes();?>>

有些浏览器或机器人会使用这行代码检查你的页面语言。

语言切换器

语言切换小工具( Widgets)

到小工具的管理页面,你可以找到语言切换器,它目前有五个选项:

显示语言名称

显示标示

强制链接到首页

**当前语言

使用下拉菜单的形式显示

如果你取消了“显示语言名称”和“显示标示”这两个选项,小工具会显示语言名称。如果你勾选了“使用下拉菜单的形式显示”,就不会显示标示,无论你是否选择勾选了“显示标示”选项。

如果你勾选了“强制链接到首页”,小工具会一直把访问者带到相应的语言的首页上,不勾选,语言切换器会试着找到翻译页。(没找到的话会回到首页上)。

如果勾选了“**当前语言”,小工具就不会显示当前语言。

不管使用哪个选项,切换工具上的语言只有在至少有一个文章或页面使用了这个语言的时候才显示。

语言的标示图像可以在 wp_content/polylang目录里找到,比如区域设置为 en_US,那么就会使用 en_US.png这个图像。

导航菜单

你的主题必须支持自定义导航菜单,而且必须在 wp_nav_menu函数里使用了一个主题区域。例如:

wp_nav_menu(array('theme_location'=>'primary'));可以

wp_nav_menu(array('menu'=>'nav menu'));不可以

你可以为每种语言创建菜单。然后到菜单选项卡里的语言设置页面为每种语言选择正确的菜单。

你可以添加一个语言切换器在菜单的结尾处。勾选“在菜单结尾处显示语言切换器”。

如果你没勾选“显示语言名称”还有“显示标示”,语言切换器会使用语言名称。

如果勾选了“强制链接到首页”,语言切换器会把访问者带到正确的语言的首页,不然它会去寻找翻译页面(没找到的话就会回到首页上)。

勾选“**当前语言”,语言切换器就不会显示当前语言。

*后记得点击保存更改按钮。

字符串翻译

Polylang可以翻译用户定义的字符串,比如网站的标题,标语,小工具标题。你还可以为每种语言选择不同的语言格式和时间格式。插件或主题可能会添加其它的字符串到这个列表里。

名称:为了方便排序。

字符串:要翻译的字符串。

翻译:不同语言下每个字符串的翻译。

默认所有翻译的字符串都会保存在数据库里,有一个复选框允许你清理在数据库里的没有用的字符串。

翻译分类或标签

设置每个已有的分类与标签的语言非常重要,不然他们不会显示。设置语言,只需要在描述字段下面的下拉菜单里选择。

翻译文章或页面

设置每个已有的文章与页面的语言非常重要,不然他们不会显示。在文章或页面的编辑界面的右边栏上,你可以选择语言。

每种语言你都有三种选项:

不想翻译文章的话可以什么都不做。

如果翻译已经存在的话,在文章 ID字段里填上文章的 ID。

如果你想创建一个新的翻译,点击语言后面添加链接。如果翻译的分类和标签可用,会自动填到文章翻译里,父页面也是一样的。

同步元数据

Polylang会同步文章或页面与翻译之间的一些元数据和选项,默认的同步元数据的选项是:

分类与标签

自定义字段

评论与 ping状态

置顶文章与发布日期

文章格式

页面层级,页面模板,页面排序

特**像

相关文章
在线客服
微信联系
客服
扫码加微信(手机同号)
电话咨询
返回顶部