小编Ali*_*xel的帖子

PHP中分布式系统的剖析

我有一个问题,这让我很难找到理想的解决方案,为了更好地解释它,我将在这里公开我的方案.

我有一台服务器将收到几个客户的订单.每个客户端将提交一组应在某些指定时间间隔执行的重复任务,例如:客户A提交的任务AA应该在2009-12-31和2010-12-31之间每分钟执行一次 ; 因此,如果我的数学是正确的,一年中大约525 600次操作,给定更多的客户端和任务 ,让服务器处理所有这些任务是不可行的,所以我想出了工人机器的想法.服务器将在PHP上开发.

工作机器只是常规廉价 的基于Windows的计算机,我将在我的家中或工作场所托管,每个工作人员将拥有专用的Internet连接(带有动态IP)和UPS以避免断电.每个工作人员还将通过Web服务调用每隔30秒左右查询服务器,获取下一个待处理作业并进行处理.作业完成后,工作人员会将输出提交给服务器,并无限期地请求新作业.如果需要扩展系统,我应该设置一个新的工作者,整个事情应该无缝运行.工作者客户端将使用PHP或Python开发.

在任何给定时间,我的客户端都应该能够登录到服务器并检查他们订购的任务的状态.

现在这里是棘手的部分:

  • 如果由于某种原因服务器出现故障,我必须能够重建已处理的任务.
  • 工作人员不是特定于客户的,一个工人应该为任何给定数量的客户处理工作.

我对一般数据库设计和使用哪些技术有一些疑问.

最初我想过使用几个SQLite数据库并将它们全部加入到服务器上,但我无法弄清楚如何按客户端分组来生成作业报告.

我从来没有真正使用过以下任何技术:memcached,CouchDB,Hadoop等等,但我想知道这些是否适用于我的问题,如果是的话,你推荐给新手使用的是像我这样的"分布式计算"(或者这是平行的吗?).请记住,工人拥有动态IP.

就像我之前说过的那样,我也遇到了一般的数据库设计问题,部分是因为我还没有选择任何特定的R(D)DBMS但是我认为它与我选择的DBMS无关的一个问题是相关的到排队系统 ...我应该预先计算特定作业的所有绝对时间戳并具有大量时间戳,执行并按升序标记它们,或者我应该有一个更聪明的系统,如" 当时间戳模数60 = = 0 - >执行 ".这个"聪明"系统的问题在于,某些工作不会按顺序执行,因为有些工作人员可能在等待其他人过载时无所事事.你有什么建议?

PS:我不确定这个问题的标题和标签是否恰当地反映了我的问题和我想要做的事情; 如果没有请相应编辑.

感谢您的输入!

@timdev:

  1. 输入将是一个非常小的JSON编码字符串,输出也将是一个JSON enconded字符串,但稍大一点(大约1-5 KB).
  2. 输出将使用来自Web的几个可用资源来计算,因此主要瓶颈可能是带宽.数据库写入也可以是一个 - 取决于R(D)DBMS.

php sqlite distributed database-design couchdb

27
推荐指数
1
解决办法
6658
查看次数

数据库 - 设计"事件"表

在阅读了这篇伟大的Nettuts +文章的提示之后,我想出了一个表模式,它可以将高度易变的数据与其他表进行大量读取分离,同时降低整个数据库模式中所需的表数,但是我我不确定这是不是一个好主意,因为它不符合规范化的规则,我想听听你的意见,这里是一般性的想法:


我有四种类型的模拟用户的类表继承结构,在主"用户"表我常用的数据存储到所有用户(id,username,password,数flags,...)与一些一起TIMESTAMP字段(date_created,date_updated,date_activated,date_lastLogin,. ..).

引用上面提到的Nettuts +文章中的#16提示:

示例2:表中有"last_login"字段.每次用户登录网站时它都会更新.但是表上的每次更新都会导致刷新该表的查询缓存.您可以将该字段放入另一个表中,以将用户表的更新保持在最低限度.

现在它变得更加棘手,我需要跟踪一些用户统计信息

  • 有多少独特的用户配置文件中看到时代
  • 多少唯一一个多次从广告特定类型的用户进行点击
  • 多少唯一一个多次从后特定类型的用户看到
  • 等等...

在我完全规范化的数据库中,这增加了大约8到10个额外的表,这不是很多但是如果可以的话我想保持简单,所以我想出了以下" events"表:

|------|----------------|----------------|---------------------|-----------|
| ID   | TABLE          | EVENT          | DATE                | IP        | 
|------|----------------|----------------|---------------------|-----------|
| 1    | user           | login          | 2010-04-19 00:30:00 | 127.0.0.1 |
|------|----------------|----------------|---------------------|-----------|
| 1    | …
Run Code Online (Sandbox Code Playgroud)

mysql database database-design partitioning relational

26
推荐指数
1
解决办法
9462
查看次数

在基于PHP的SMTP客户端中设置DomainKeys/DKIM

看起来有一些很棒的库可以在C#/ .NET上对DomainKeys进行电子邮件签名,但是我很难找到同样的PHP支持.也许我不是在寻找合适的地方?

我找到的唯一一个是http://php-dkim.sourceforge.net/ ; 它看起来非常h​​acky并且仅支持PHP4.考虑到PHP的流行程度,以及DomainKeys对于非垃圾邮件分类的重要性,我希望有更好的工具; 你知道吗?你推荐的任何其他技巧?

额外信息:我正在使用外部SMTP提供商,因为我需要每天发送数千封电子邮件.

php smtp email-spam domainkeys dkim

26
推荐指数
4
解决办法
4万
查看次数

PHP中的URL友好用户名?

在我的PHP站点上,当前用户使用电子邮件地址和密码登录.我想添加一个用户名,他们设置的用户名将是唯一的,他们无法更改.我想知道如何使这个名称没有空格并在URL中工作,所以我可以使用用户名链接到配置文件和其他东西.如果用户名中有空格,则应添加下划线jason_davis.我不确定最好的方法吗?

php string friendly-url slug

23
推荐指数
1
解决办法
2万
查看次数

使用PHP进行非WWW重定向的WWW

我想用PHP将所有www.domain.com请求重定向到domain.com,基本上:

if (substr($_SERVER['SERVER_NAME'], 0, 4) === 'www.')
{
    header('Location: http://' . substr($_SERVER['SERVER_NAME'], 4)); exit();
}
Run Code Online (Sandbox Code Playgroud)

但是,我确实希望像在SO中一样维护请求的URL,例如:

http://www.stackoverflow.com/questions/tagged/php?foo=bar
Run Code Online (Sandbox Code Playgroud)

应重定向到:

http://stackoverflow.com/questions/tagged/php?foo=bar
Run Code Online (Sandbox Code Playgroud)

我不想依赖.htaccess解决方案,而且我不确定$_SERVER我必须使用哪些变量来实现这一目标.此外,保留HTTPS协议将是一个加号.

我该怎么做?

php redirect no-www

22
推荐指数
2
解决办法
2万
查看次数

Javascript分布式计算

为什么没有任何Javascript分布式计算框架/项目?这个想法对我来说非常棒,因为:

  • 客户端是浏览器
  • 可以使用AJAX进行迭代
  • 网站管理员可以通过链接相应的Javascript来帮助项目
  • 数百万甚至数十亿用户甚至不会注意到DC项目

请分享您对此主题的看法.

编辑:另外,您认为哪种问题适合JSDC?

例如,GIMPS无法实现.

javascript ajax distributed-computing

21
推荐指数
3
解决办法
4223
查看次数

PHP中的RGB到HSV

在PHP中,将RGB三元组转换为HSV值的最简单方法是什么?

php rgb image colors hsv

21
推荐指数
2
解决办法
2万
查看次数

确定PHP数组中的维数

有没有办法确定PHP数组中有多少维度?

php

21
推荐指数
2
解决办法
1万
查看次数

SQLite的标准偏差

我搜索过SQLite文档并找不到任何内容,但我也在谷歌上搜索了一些结果.

SQLite是否有任何内置的标准偏差功能?

sqlite function standard-deviation

21
推荐指数
5
解决办法
2万
查看次数

XSS - 哪些HTML标记和属性可以触发Javascript事件?

我正在尝试编写一个安全且轻量级的基于白名单的HTML净化器,它将使用DOMDocument.为了避免不必要的复杂性,我愿意做出以下妥协:

  • HTML评论已删除
  • scriptstyle标签一起被剥离
  • body返回标记的子节点
  • 可以触发Javascript事件的所有HTML属性都将被验证或删除

我一直在阅读关于XSS攻击和预防的很多内容,我希望我不是太天真(如果我,请让我知道!)假设如果我遵循上面提到的所有规则,我将会从XSS安全.

问题是除了默认的Javascript事件属性之外,我不确定其他标签和属性(在任何[X] HTML版本和/或浏览器版本/实现中)可以触发Javascript事件:

  • onAbort
  • onBlur
  • onChange
  • onClick
  • onDblClick
  • onDragDrop
  • onError
  • onFocus
  • onKeyDown
  • onKeyPress
  • onKeyUp
  • onLoad
  • onMouseDown
  • onMouseMove
  • onMouseOut
  • onMouseOver
  • onMouseUp
  • onMove
  • onReset
  • onResize
  • onSelect
  • onSubmit
  • onUnload

是否有任何其他非默认或专有事件属性可以触发Javascript(或VBScript等)事件或代码执行?我能想到的href,style并且action,例如:

<a href="javascript:alert(document.location);">XSS</a> // or
<b style="width: expression(alert(document.location));">XSS</b> // or
<form action="javascript:alert(document.location);"><input type="submit" /></form>
Run Code Online (Sandbox Code Playgroud)

我可能只是删除styleHTML标记中的任何属性,action并且href属性构成了更大的挑战,但我认为以下代码足以确保它们的值是相对或绝对URL而不是一些讨厌的Javascript代码:

$value = $attribute->value;

if ((strpos($value, ':') !== false) && (preg_match('~^(?:(?:s?f|ht)tps?|mailto):~i', $value) == 0))
{
    $node->removeAttributeNode($attribute); …
Run Code Online (Sandbox Code Playgroud)

html javascript php security xss

21
推荐指数
2
解决办法
9334
查看次数