`

聊天纪实 - 关于框架、Memcache

 
阅读更多



/*以下内容请勿转载,看看就行了,转载也没有意义。。。*/

【2007-01-23 下午】

善良的BEN 17:38:00
看看这些潜移默化的影响也是很有意思的一件事~
·随风 17:38:21
等下各位不要太激动了
@fleaphp 17:38:24
??
善良的BEN 17:38:43
为什么C程序员喜欢 xxxx_xxxx 命名方式?
@fleaphp 17:38:57
又在争论啥啊?
善良的BEN 17:39:34
这跟 C 的 大小写敏感分不开吧~ 程序员又很懒,干脆全部小写好了~
善良的BEN 17:40:09
Delphi 不区分大小写,所以都是 ILoveYou的命名
·随风 17:40:38
各有各的好撒。
黑夜路人 17:37:07
php不区分大小写
善良的BEN 17:41:26
php 就是 c 的 web 版~
黑夜路人 17:37:49
知道就好!
黑夜路人 17:37:56
小巧、精致、快速、安全!
黑夜路人 17:38:22
表欺负俺们不懂C,不懂指针,不懂结构体~~~~
善良的BEN 17:42:35
不是
善良的BEN 17:42:51
有时候想想这些东西很有意思的~
黑夜路人 17:39:03
php一行搞定的事情,java需要10行,.net 需要15行。。
@fleaphp 17:43:19

飞风 17:43:55

黑夜路人 17:40:16
自从用了FleaPHP以后啊,我们php开发效率超高,速度巨快,吃嘛嘛香,上楼还特别有劲儿~~~
飞风 17:44:22

善良的BEN 17:44:39
一行顶五行~
善良的BEN 17:45:04
一般人我还不告诉他~
黑夜路人 17:41:53
你试试:file_get_contents(),用java和.net看看都是几行,嘿嘿。。
·随风 17:46:08
自从有了 FleaPHP 之后。咱腰不酸了,腿不痛了,一口气写一天不费劲。。
黑夜路人 17:42:55
这个不一定,嘿嘿,我用fleaphp老费劲了,要改变自己的编程方式,感觉写代码变成了力气活
黑夜路人 17:43:15
就把一些无聊的东西填到指定的文件里就完事了,汗
·随风 17:47:22
这就好撒。。目的达到了就行了。
·随风 17:47:57
要是需要某个功能软件。。 能只要在开发工具里打勾选上就OK 那更好了。
善良的BEN 17:48:03
脚本语言跟相比其它的编译型或半编译型有个重大的区别
黑夜路人 17:44:17
而且我估计啊,用了框架以后,会多很多无谓的数据库操作,嘿嘿
善良的BEN 17:48:20
就是带有一场丰富的函数库
善良的BEN 17:48:24
不过php
黑夜路人 17:44:47
我爱函数库!c就没有这么多,嘿嘿~~~~用起来很不爽
@fleaphp 17:48:43
黑夜路人 17:48:10
而且我估计啊,用了框架以后,会多很多无谓的数据库操作,嘿嘿

想当然了哈
善良的BEN 17:48:51
asp、js、vbs等都得靠这个~
黑夜路人 17:45:42
问问老廖,fleaphp是不是多很多无谓的数据库操作,比如插入个数据吧,它还会帮你做安全检测什么的,嘿嘿,自然需要查询数据库了
@fleaphp 17:49:50
谁说安全检测要读数据库啦
黑夜路人 17:46:04
对于高并发的网站,这事很可怕滴,搞不好数据库服务器马上就死了,嘻嘻
@fleaphp 17:50:02

善良的BEN 17:50:11
俺就比较喜欢SQL直接插入~
@fleaphp 17:51:11
呵呵
黑夜路人 17:47:42
老廖你承认不承认你滴框架多了很多数据库操作?
飞风 17:52:05
黑夜路人 17:51:34
老廖你承认不承认你滴框架多了很多数据库操作?

这个好像没什么关系把
@fleaphp 17:52:16
根本就没多。。。。。何须承认?
飞风 17:52:20
MVC和多数据库操作是两码事啊~
飞风 17:52:24
寒~
黑夜路人 17:49:19
那你做非空检测怎么做的?
飞风 17:53:41
那些那用数据库。。
@fleaphp 17:53:52
数据表的元数据信息利用起来就行了。这个元数据信息只查询一次,以后都是缓存的。
黑夜路人 17:50:23
就是说,在初始化表的时候就提取了数据库结构和定义了?
@fleaphp 17:54:20
是啊
黑夜路人 17:50:46
哪个是not null哪个是null的都缓存了?缓存在什么地方?
@fleaphp 17:55:16
元数据就包括了每一个字段的名字、类型、not null、是否是主键、是否有默认值等等
黑夜路人 17:51:45
哦,保存在什么地方?
@fleaphp 17:55:50
缓存为文件了
黑夜路人 17:52:05
就是哪个cache目录下?
@fleaphp 17:56:02
en
黑夜路人 17:52:29
恩,这还差不多,嘿嘿,奖励你一个!
黑夜路人 17:52:49
不错磁盘io操作会不会成为瓶颈?
善良的BEN 17:57:11
全部扔到内存
@fleaphp 17:57:25
一个数据只有一个元数据信息缓存文件,再说还能放到memcached里面。
黑夜路人 18:05:09
Ben呀,你能不能对memcache做个扩展呀
黑夜路人 18:05:28
比如能够按照正则匹配提取指定key的数据,还有日志记录功能
善良的BEN 18:14:08
问题是
黑夜路人 18:10:41
俺c不好,不然早下手了。。。
善良的BEN 18:14:39
在 php 的扩展上做还是在 memcache 上做?
黑夜路人 18:11:22
废话,当然是服务器端了
黑夜路人 18:12:07
另外,memcache的分布式功能是在客户端做的,我读了半天代码也没发现是如何实现的,就发现一个pool,但是不知道是如何把不同的key存储到不同的server上的
黑夜路人 18:12:48
有空你给读读php扩展的代码,就一个文件,66k
黑夜路人 18:13:37
不过这里还是有一个问题,就是如果是在服务器端实现的,那么查询某些key的话,就只能在一台服务器上了。。
@fleaphp 18:17:56
搞得累,本来就是为了提高运行效率,还把正则这些搞进去
善良的BEN 18:18:08
php扩展的代码我看过,还是比较简单的
黑夜路人 18:14:44
嘿嘿。。。为了实现一些bt需求。。。还是有必要的
善良的BEN 18:18:33
就是那个memcache代码没看,感觉自己搞不定~
@fleaphp 18:18:54
为了罕见的需求增加一个通用项目的复杂度,不可取
黑夜路人 18:15:14
你读了扩展里面,它分布式是咋实现的?hash?我就发现一个CRC32的校验hash。。。
善良的BEN 18:19:14
合理情况下是应该服务端实现的
@fleaphp 18:19:14
分布式怎么可能靠客户端实现啊
善良的BEN 18:19:35
最好是增加一个命令
黑夜路人 18:15:57
服务器端的协议我没发现有关于分布式的内容
善良的BEN 18:20:04
php扩展就是直接发送命令过去的
黑夜路人 18:16:21
而且服务器端不具有跟其他服务器通信的内容
黑夜路人 18:16:35
只有跟客户端通信的内容
善良的BEN 18:20:48
分布式是php扩展实现的
黑夜路人 18:17:15
支持Ben的说法!
黑夜路人 18:17:31
而且我认为是在key上做的手脚,呵呵
善良的BEN 18:21:21
它把多个服务端的地址保存到一个表,然后查询
黑夜路人 18:17:45
有一个 mmc_pool 的结构体
@fleaphp 18:22:17
那这样的分布式就不可能实现容错,只不过是把不同的数据存在不同的地方而已
善良的BEN 18:22:21
如果在 A 服务端查找不到 key 的就再去 B 服务端查
善良的BEN 18:22:35
逐次类推
善良的BEN 18:23:46
其实啥分布式
善良的BEN 18:24:02
就是一个全局变量服务器~
善良的BEN 18:24:49
@fleaphp 18:22:17
那这样的分布式就不可能实现容错……
这里的容错是什么意思?
善良的BEN 18:25:06
宕机恢复?
@fleaphp 18:26:04
冗余的意思。比如我有多个memcached server,其中一个挂了不会导致数据丢失。

按照你先前的说法,那memcached只不过是一个内存仓库而已。而所谓的分布式是指可以使用多个仓库,但仓库与仓库之间没有任何关系。
善良的BEN 18:27:11
那可以多个设立多个 memcached server,内容一样,然后在 php 中添加各个服务端
善良的BEN 18:27:26
一个挂掉后,自然就查询不到
善良的BEN 18:27:37
就会再查第二个
@fleaphp 18:27:48
。。。。。这样岂不是存储一个数据就要同时连接多个server,恐怕数据传输时间都不可细算
善良的BEN 18:28:37
这就需要黑路所说的,再在服务端增加一个同步命令了,由cron 定时执行
@fleaphp 18:29:30
不能定时执行。假设请求a存入了一个数据到server 1,此时server 1还没有把数据同步到server 2/3/4。结果server 1挂了,server 2/3/4就没有需要的数据了。
善良的BEN 18:31:29
或者触发执行。
善良的BEN 18:31:43
不过真要点背,谁都没有法子
@fleaphp 18:31:56
其实我觉得这个东西搞那么复杂完全没必要。不就是缓存么,查不到缓存就重新生成一次,最多是执行慢一点。
善良的BEN 18:33:41
服务端代码啥样我还没看,但 php 扩展也就是客户端根本就没有缓存 key
善良的BEN 18:34:32
好像都是直接提交命令给服务端的
善良的BEN 18:36:07
不过我倒没有这方面的需求,因此不太 care~
善良的BEN 18:37:40
作一些共享session倒还不错~
黑夜路人 18:37:15
原来所谓的分布式就是一个个服务器去查呀。。。
黑夜路人 18:37:29
不对吧,那存储的时候怎么存?随机?挑到一个服务器就往里丢?
黑夜路人 18:38:13
我还以为是按照提交的key进行hash,然后hash结果分布的保存到不同服务器。。。汗。。。
黑夜路人 18:39:17
看来memcache比较重要的是:
1. 能够按照指定正则查询key和数据
2. 能够多台服务器进行同步
3. 能够记录日志
善良的BEN 18:43:22
那不管。存的时候就是生成一个服务端的命令,直接丢过去
黑夜路人 18:39:40
Ben,这个重任组织就交给你了!
善良的BEN 18:44:22
不过这样倒也为不同语言的分工协作提供了便利~
黑夜路人 18:40:59
就是大伙可以使用memcache来做中间服务器?
善良的BEN 18:45:18
是啊。至少 php 扩展是直接丢命令的
黑夜路人 18:41:48
另外,memcache连个登录都没有,太不安全了,必须加上一个验证的功能,每次传输过程使用私钥,然后服务器断验证,通过就继续操作,否则拒绝
善良的BEN 18:45:58
如果其他客户端也是丢命令,那理论上是可以“互联互通”的~
黑夜路人 18:42:29
或者链接以后服务器端生成一个Session ID,然后客户端就携带这个Session ID跟服务器端通信,进行验证
善良的BEN 18:46:35
memcache本来就是为高负载所涉设计的,你要是再加上个验证,估计就废了~
黑夜路人 18:43:34
mysql都没废,它废啥,主要的速度是在保存在内存,不想mysql,是磁盘,时间都浪费在磁盘io上
善良的BEN 18:50:20
再加上权限管理,这样弄到最后就快成一个DB了~
黑夜路人 18:47:15
本来cache就必须类似缓存。。。都是存储数据。。。
善良的BEN 18:51:45
做好 ip 限制,只能某个 ip访问
黑夜路人 18:48:03
最好还有一套查询语言。。
黑夜路人 18:48:15
类似于sql的。。。
善良的BEN 18:52:05

善良的BEN 18:53:52
YY有理~
黑夜路人 18:53:16
限制ip+验证,够安全了!
黑夜路人 18:53:41
还有就是公钥私钥怎么办
善良的BEN 18:57:56
要那干啥
黑夜路人 18:54:40
可以学习工行口令卡,嘿嘿,服务器端链接的时候生成一个二维数组的内容,包含一些字符串,客户端持有这个密钥所在为二维数组的下表,哈哈
黑夜路人 18:55:04
这样,客户端持有这个密钥去服务器端验证,就不可能被破解了,嘻嘻
黑夜路人 18:55:12
而且每次的数据都不一样
黑夜路人 18:56:20
至于ip限制,目前只能在操作系统上整,搞个iptable、ipfw之类的,那不行
黑夜路人 18:56:30
可以整合到memcache里面去,直接做个配置文件,嘿嘿
善良的BEN 19:00:50
安全应该不是mm考虑的问题,ipfw在 kernel 层效率要比 mm 高的多
@fleaphp 19:11:49
我晕,memcached真要加上什么加密传输,还不如不用
黑夜路人 19:11:00
还要加上查询语言咧。。
黑夜路人 19:11:35
类似于sql,叫做:MQL (Memcache Query Language)

。。。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics