精华内容
下载资源
问答
  • 消息的传递常系统规设计中都依赖MQ,目前MQ中间件常用的有RabbitMq、roketmq、kafka、zeromq、activeMq,咱们这里面... 假定消息中间件的消息顺序性是可以保障的(消息中间件假定kafka: 一个topic下可以有多个partit...

    消息的传递常系统规设计中都依赖MQ,目前MQ中间件常用的有RabbitMq、roketmq、kafka、zeromq、activeMq,咱们这里面先忽略mq的顺序性保障 ,重点讨论mq的上下游(producer、consumer)的消息顺序性保障如何实现。

    如果这么设想的话,问题会变得简单些。 假定消息中间件的消息顺序性是可以保障的(消息中间件假定kafka: 一个topic下可以有多个partition, partition内的顺序可保障,消息可以多次消费)

    首先来看一下 consumer的消息顺序性保障

    1) 如果是一个topic 一个partition,partition中消息本来就是顺序的, 下游consumer的消费业务时延【可忽略】:一个线程就能搞定,此时是最简单的一种情况,直接单线程消费就能保障消息的时序性。

    2) 如果是一个topic 一个partition,partition中消息本来就是顺序的,下游consumer的消费业务时延【不可忽略】:此时一个线程消费不过来了,容易照成业务堆积了。此时如何保障消息的顺序性?

    假定业务场景:消息中存储的是用户的积分变动,且用户间消息无业务依赖。消息中有userid,此时用userid做hash,拆分成多个桶,每个桶对应一个线程进行处理此时即可保障单用户消息的时序性,利用业务特性提升consumer的并发消费能力。

    具体操作:consumer启动x个线程(或进程)每个线程都消费当前partition所有的消息,如果这个消息的 userid%x=自己的序号就处理这条消息,否则就跳过(这里面可以进一步用一致性hash考虑consumer的可靠性)。

    此场景再次扩展,如果某个hash下面存在热点如何处理: 如果业务特性允许可以进行二次hash。

    看一下MQ的顺序性保障

    1)刚才假定consumer只消费一个partition,如果当前mq的吞吐量不够如何处理

    基于以上讨论mq单个partition的顺序性是能够保障的。此时可以考虑刚才consumer的处理方式,根据业务独立特性将消息进行分桶,不同的消息(或者按照某维度进行拆分)进入不同的partition。

    此时高吞吐量的场景下:在mq以及下游consumer的消息的时序和时延都能够得到很好的保障。

    417ceea308fd54ea5cc3bcde2fcfe5c0.png

    此时利用各种hash将消息进行拆分,利用并发提高整体消息系统在mq和consumer的消息处理能力。

    但是有些业务的对时序和时延的要求是不一样的以上方案只能解决部分场景下的问题。

    producer的顺序性保障

    如果源头消息的产生就不是顺序的下游如何处理都不不靠谱(此处太绝对)。因此消息源头如何保障顺序性至关重要。但是细想这个问题好像比上面的两个环节要更复杂。

    1) 第一种情况 一个消息源头: 此时producer 是一个线程,线程内处理业务是顺序的产生的消息是本身自带顺序性,直接投放到MQ是没有问题的,hash投放到多个partition也是可以的,此时顺序是可以保证的。

    2)第二种情况,多个消息源头: 此时producer 是多个线程。 单个线程内处理消息产出的顺序是顺序的,多个线程间的消息产出顺序不可保证。

    例如:一个A线程修改一条数据,产生一条消息。 另外一个线程B修改同一条数据产生一条消息。 在全局时间空间里面,A发生在B前面。但是没法保证A消息一定先于B消息投放到MQ的同一个partition。这个场景就比较复杂了,中间实现的各种细节如果再考虑到这个问题就更加复杂了。

    这个场景如何处理:

    A)假设:消息产生都是对mysql数据库具体数据的变更,此时将mysql的binlog订阅到MQ里面即可。这个方法利用了将多源变成了单源,这种场景只是特例,系统中存在组件能够提供顺序性的消息刚好又和消息相关。

    B)假设:消息的产生就是在业务层应用内的具体线程里面产出:此时再加个假设条件消息在具体线程里面产生时带的顺序标记(当前时间)是靠谱的。

    有些场景是不靠谱的这个地方咱们简单说一下:如果触发某个函数会产生一条消息,函数完成了线程被挂起了,挂起5分分钟,当线程继续运行的时候获取当前时间作为顺序标识,完成消息的制造,此时顺序标记就是不靠谱的(为了能更好的抽象思考这个问题这个场景咱们先忽略)

    此时我们已经有了线程内的具体时序标识,只要按照这个标识的先后顺序投递到MQ下游的消息顺序性就能保证了。但是保证先后顺序是很困难的,为什么这么说呢。按照目前MQ中间件提供的能力,其困难点主要在于有序投递,而有序投递目前MQ的中间件是不负责的。

    此时假定我们有n个线程能够产生具有可靠顺序标记的消息,然后消息发送到某个消息排序缓存中,然后顺序的投递到MQ好像就能解决这个难题。但是得有这样一个消息排序缓存。直接想比较难,但是如果是个时序优先级的队列就好思考了,但是这个队列缓存未排好序的不能读。如下图:

    1cdfb3342a86487a26594ee016900895.png

    以上讨论假定了很多因素(系统间的交互幂等,异常)只是为了聚焦时序本身。当然以上设计也是有很多问题的,假如某个app的消息发送不到缓冲区,为了保证时序性。我们是暂停消费还是丢弃(能保证时序)直接继续向下(保证时延小),还是直接下游消费等待上游app恢复后继续(消费者是否能接受这个延迟)。

    看场景处理问题

    两个名词(时序,时延),四个象限:

    d6446ac0d2f2ed84f03b5e24133ed5dc.png

    时序:代表消息的顺序性保障。

    时延:代表消息从产生到被消费的时间间隔。

    这里面具体的场景具体分析,但是同时保证这两项非常困难。以上场景的诸多假设把问题抽象简单了,但是实际场景中producer本来就有n个,而且一个producer又可能有n个线程。线程间的顺序要保证,然后所有producer的顺序要保证还是非常有挑战的。

    当然,未来这些都能解决。

    展开全文
  • 1、今天这篇文章,我延续第 2 篇中介绍的 WAL 的概念,和你解释了这机制后续需要的刷脏页操作和执行时机。利用 WAL 技术,数据库将随机写转换成了顺序写,大大提升了数据库的性能。2、但是,由此也带来了内存脏页...

    1、今天这篇文章,我延续第 2 篇中介绍的 WAL 的概念,和你解释了这个机制后续需要的刷脏页操作和执行时机。利用 WAL 技术,数据库将随机写转换成了顺序写,大大提升了数据库的性能。

    2、但是,由此也带来了内存脏页的问题。脏页会被后台线程自动 flush,也会由于数据页淘汰而触发 flush,而刷脏页的过程由于会占用资源,可能会让你的更新和查询语句的响应时间长一些。在文章里,我也给你介绍了控制刷脏页的方法和对应的监控方式。

    3、现在你已经知道了,如果要收缩一个表,只是 delete 掉表里面不用的数据的话,表文件的大小是不会变的,你还要通过 alter table 命令重建表,才能达到表文件变小的目的。我跟你介绍了重建表的两种实现方式,Online DDL 的方式是可以考虑在业务低峰期使用的,而 MySQL 5.5 及之前的版本,这个命令是会阻塞 DML 的,这个你需要特别小心。

    4、你可能还记得在第 10 篇文章《 MySQL 为什么有时候会选错索引?》中我提到过,索引统计的值是通过采样来估算的。实际上,TABLE_ROWS 就是从这个采样估算得来的,因此它也很不准。有多不准呢,官方文档说误差可能达到 40% 到 50%。所以,show table status 命令显示的行数也不能直接使用。

    5、按照效率排序的话,count(字段)

    6、其实,把计数放在 Redis 里面,不能够保证计数和 MySQL 表里的数据精确一致的原因,是这两个不同的存储构成的系统,不支持分布式事务,无法拿到精确一致的视图。而把计数值也放在 MySQL 中,就解决了一致性视图的问题。InnoDB 引擎支持事务,我们利用好事务的原子性和隔离性,就可以简化在业务开发时的逻辑。这也是 InnoDB 引擎备受青睐的原因之一。

    7、从并发系统性能的角度考虑,应该先插入操作记录,再更新计数表。知识点在《行锁功过:怎么减少行锁对性能的影响?》因为更新计数表涉及到行锁的竞争,先插入再更新能最大程度地减少了事务之间的锁等待,提升了并发度。

    8、在使用WAL的系统中,所有的修改都先被写入到日志中,然后再被应用到系统状态中。通常包含redo和undo两部分信息。redo log称为重做日志,每当有操作时,在数据变更之前将操作写入redo log,这样当发生掉电之类的情况时系统可以在重启后继续操作。undo log称为撤销日志,当一些变更执行到一半无法完成时,可以根据撤销日志恢复到变更之间的状态。

    展开全文
  • 又一个wordpress网站

    千次阅读 2015-05-23 12:33:46
    除了域名花了29,其余都免费的...http://wanqiang.wang/我的blog生涯,最开始是在baidu的hi空间,上面有我整个学生时代的记忆,工作后转战别的地方,段时间没有注意,整个hi空间都关掉了,文章都被移到了百度云里面。

    不过这次是我自己的,走过路过的帮点击下啊。除了域名花了29,其余都免费的,正在审请备案。观迎大家咨询。

    http://wanqiang.wang/

    我的blog生涯,最开始是在baidu的hi空间,上面有我整个学生时代的记忆,工作后转战别的地方,一段时间没有注意,整个hi空间都关掉了,文章都被移到了百度云里面。

    展开全文
  • WordPress的多站点功能允许安装一个WordPress程序的情况下,实现多个站点(也就是一套程序,可以绑定多个域名或子域名)。 每个站点拥有独立的主题、插件、文章以及页面。 这样可以极大的减少了维护和更新多个...
  • 对于多个WordPress站点使用同一数据库可通过修改表前缀(Table Prefix)来实现,主要分两种情况
  • 这篇博客介绍如何在centos7上,基于虚拟主机在一个服务器上部署多个站点,我只部署了两个站点(discuz和WordPress),如果你的服务器够强硬,多搭几个也不成问题哦。我是基于虚拟机做的,比较简单,但还是提前说明下...
  • 1、只安装一个Wordpress程序即可创建多个wordpress站点,可以是子域名也可以是子目录。 2、可以有独立的博客后台,独立的博客地址。 3、管理员可设置开放哪些主题给站点使用。 4、管理员可配置插件给每个站点使用。 ...
  • 对于多个WordPress站点使用同一数据库可通过修改表前缀(Table Prefix)来实现,主要分两种情况:尚未安装WordPress在初始配置WordPress之前,将wp-config.php中的$table_prefix值(默认为wp_)修改为所需要的表前缀...

    f58a9385c6ccbfa12c6ea245fe5778fd.png

    对于多个WordPress站点使用同一数据库可通过修改表前缀(Table Prefix)来实现,主要分两种情况:

    尚未安装WordPress

    在初始配置WordPress之前,将wp-config.php中的$table_prefix值(默认为wp_)修改为所需要的表前缀(本文中假设为blog_),然后一路安装即可。

    修改前:/** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each a unique * prefix. Only numbers, letters, and underscores please! */$table_prefix= 'wp_';修改后:/** * WordPress Database Table prefix. * * You can have multiple installations in one database if you give each a unique * prefix. Only numbers, letters, and underscores please! */$table_prefix= 'blog_';相关推荐:《WordPress教程》

    已安装WordPress

    若WordPress已安装,则执行以下步骤:

    1. 将wp-config.php中的$table_prefix值wp_修改为所需要的表前缀(blog_)。

    2. 将MySQL数据库中的对应表前缀均修改为新的表前缀,如下图:

    94dfae64384b91f363c430b0c6c70a1a.png

    展开全文
  • 尚未安装WordPress。在初始配置WordPress之前,将wp-config.php中的$table_prefix值(默认为wp_)修改为所需要的表前缀(本文中假设为blog_),然后一路安装即可。 修改前: /** * WordPress Database Table prefix. * *...
  • WordPress站点二-源码

    2021-02-15 13:05:39
    WordPress站点二 这只是一个wordpress网站,我尝试使用该主题并更改其中的一些内容。 lorem ipsum用于伪文本
  • 摘要:wordpress默认是只认一个安装时的域名地址的,但是可以通过文件修改让wordpress支持多个域名独立访问。 wordpress默认是只认一个安装时的域名地址的,但是可以通过文件修改让wordpress支持多个域名独立访问。...
  • phpStudy和xampp非常方便的在本地搭建 apache + php + mysql 的调试环境,在本地安装测试 WordPress 等各种博客、论坛程序非常方便,今天我们来学习如何使用phpStudy及 XAMPP 在本地进行安装多网站。 、网站...
  • 对于多个WordPress站点使用同一数据库主要分两种情况:尚未安装WordPress,将wp-config.php中的$table_prefix值修改为所需要的表前缀;已安装的话,将MySQL数据库中的对应表前缀均修改为新的表前缀即可尚未安装...
  • MySQL:一个数据库管理系统; PHP:Web 服务器生成网页的程序。 (1)安装配置Nginx sudo apt-get install nginx 启动 Nginx service nginx start 测试 Nginx 服务是否正常运行,在浏览器中,访问云主机公网 IP...
  • WordPress站点迁移实录

    千次阅读 2018-09-28 11:14:38
    现在工作稳定了,拿了点闲钱出来,重新买了台服务器,并成功将网站迁移到了新的服务器上。过程我当时没有详细记录,这篇是事后回忆写的大概,仅供大家参考。 1、架构变化:之前所用的网站架构为WinServer+IIS+...
  • Nginx提供了两种特殊的指令:”x-accel-redirect”和”map”,使用这两指令可以使得wordpress站点的网络服务实现伪静态功能。 wordpress站点使用子目录重写规则 配置中shouce.ren修改为自己的站点域名。 map $...
  • Do you want to set up and install WordPress multisite network? WordPress comes with a built-in capability to create multiple websites using the same ... 您是否要设置和安装WordPress站点网络? ...
  • 一个简单,功能强大且易于使用的插件,它将为WordPress安装增加多语言支持,即多个子域或文件夹(如果您需要跨多个域设置多个站点,则您还需要使用插件-只要这些域都托管在同一服务器上即可。) 多站点语言切换器...
  • 具体思路:在另一个 WordPress 站点创建一个API,文章发布时用cURL模拟 POST 请求 API 利用wp_insert_post()函数来创建文章。支持同步文章标题、内容、类型、分类、标签,分类需要另一个站点也有创建相同名称的分类...
  • 换句话说,要查看您的站点,他们必须在您的站点上创建或拥有一个帐户并登录。无需配置,只需激活即可 - 仅此而已。 由· 我们喜欢 WordPress 安装 要求 WordPress 1.5 及更高版本。 PHP 5.2 及更高版本。 单站点...
  • WordPress 是一款常用的搭建个人博客网站软件,该软件使用 PHP 语言...本教程以 Linux 系统 CentOS 7.5 为例,搭建一个 WordPress 个人站点,具体操作方法如下: 相关简介 以下是本教程中,将会使用的服务或工具:
  • 这具有使 WordPress 成为您的身份验证系统的巨大优势:您的 WordPress 站点可以管理您的用户帐户,并且您的用户不必记住另一个密码。 此方法涉及您的 PHP 站点WordPress 之间的多个请求,但这一切都发生在后台 ...
  • 、打开网站根目录下的 wp-config.php,在 define(‘WP_DEBUG’, ...这两句的意思就是设置网站域名为当前访问的域名,也就是取消了域名的绑定,如果不需要任意域名都能访问,只是几域名的话,可以这样: $domain .
  • 一个显示 wordpress 通过 netlify 与 root 集成的示例。 WordPress 设置 好的,首先你需要一个 wordpress 安装来用作你的 CMS。 快速获得一个的最简单方法是在 VPS 上启动一个。 查看以帮助您启动和运行。 注意:...
  • 前面我们介绍了WordPress快速实现https的方法,下面我们教你实现同一个IP的服务器上多个WordPress网站实现https的方法。server { listen 443;server_name www.example.com;ssl on;ssl_certificate ...
  • 如何搭建wordpress站点功能

    千次阅读 2019-03-27 22:10:25
    1.先开启wordpress站点网络配置。 ...define('WP_ALLOW_MULTISITE', true);...2.打开后台工具,多出一个“配置网络”的选项 3.按照提示来配置即可。(使用要前先停用所有插件,配置完成后可以再次开启) ...
  • WordPress站点搭建完美详细教程

    千次阅读 2020-08-29 08:46:57
    我们想在一个wp站点测试我们的多个主题,或者发布我们的几个WP博客,那么需要用到wordpress的多站点WordPress 3.0之后的版本都开始支持多站点管理 在WordPress后台里,这个功能被叫做“网络(Network)”。...
  • 打开根目录下的 wp-config.php 文件,找到 [php] require_once... 欢迎大家阅读《一个WordPress站点绑定多个域名_php》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码 微信 赏一包辣条吧~ 支付宝 赏一听可乐吧~

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,860
精华内容 9,144
关键字:

又一个wordpress站点