`
kmoving
  • 浏览: 12167 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论
文章列表
因为团队内部有同学使用windows,但是服务端都部署在linux下,为了修改后可以通过及时刷新浏览器看到效果.所以采用samba(尽管samba有很大的安全风险,我们只有内网访问,所以还好)进行文件共享.整体配置都没有问题,但是使用smbclient访问时总是提示NT_STATUS_ACCESS_DENIED,本来以为是文件系统权限问题,都验证了没有问题.后来查到maillist中有人遇到同样的问题http://lists.samba.org/archive/samba/2007-April/130938.html.后来证实是SELinux的问题(我们使用centos).所以采用相关开发人员的 ...
前段时间发现我们线上有台老服务器被入侵了,查看系统日志发现是通过密码扫描的方式暴力破解的,进一步检查发现是因为这台机器依旧开着密码登陆.然后把密码登陆关掉了.其他服务器的配置都是关闭着的.所以没有这个问题.后来发现办公室的开发机被人入侵并且植入了数据监控服务.清理之后发现是因为某位同学把开发机的端口映射到外网了.并且打开了密码验证的登陆方式.现在所有的线上以及线下的机器都关闭了这种方式. 另外我们有网站的管理服务,因为有同学希望在家里也可以办公,所以不能通过简单的添加防火墙来解决,所以只好采用客户端证书验证的方式(相关参考:http://rynop.com/howto-client-side- ...
在项目中为了支持搜索服务,我们使用xapian作为后端的搜索引擎.其因性能良好以及易用受到大家欢迎.下面是基本代码: import xapian import posixpath def get_db_path(): XAPIAN_ROOT = '/tmp/' xapian_user_database_path = posixpath.join(XAPIAN_ROOT, u'user_index') return xapian_user_database_path def add_document(database, words): do ...
之前看的greenlet只是提供了基本的coroutine的作用,是最小的执行单元.但是要想使用,还需要提供一个调度器,来调度什么时候哪些greenlet应该执行.所以看了一下gevent的实现,当前的稳定版本使用的是libev.libevent的一种替代方案.性能上更优越一些.libev支持很多事件类型,但是最常用的是io和timer类型的.io类型的通过系统提供的相关系统调用实现(linux下是epoll),timer类型的通过维护一个最小堆实现. 看一下下面的代码: import gevent from gevent import monkey monkey.patch_all() ...
最近使用python开发web程序,一直使用的是fastcgi模式.然后每个进程中启动多个线程来进行请求处理.这里有一个问题就是需要保证每个请求响应时间都要特别短,不然只要多请求几次慢的就会让服务器拒绝服务,因为没有线程能够响应 ...
因为文本中显示太长的url会比较乱,或者采用省略显示的方式,或者采用短url的方式. 为了同时方便统计点击数以及进行内容过滤.实现了一个生成短url值的方法. 为了防止你的hash值被破解,可以在生成md5值的时候加入你自己的salt. 这样即便直到你的code_map也不能破解到原始url了. 为了让结果更加随机,把每次循环没有使用的第二个bit保存到e里面.这样可以让结果冲突率更小. import hashlib def get_md5(s): s = s.encode('utf8') if isinstance(s, unicode) else s m = ...
在进行某些比较耗时的查询时,为了避免进行重复计算,可以采用分布式锁服务, 在同一个时间只有一个操作在进行,同类的操作进行等待重试. 下面的代码(fetch_with_dist_lock)定义了一个fetcher,一个updater. 如果fetcher获取不到数据,则使用updater进行更新.更新成功之后通过fetcher返回结果. 也有一些情况,我们只想更新某个数据,更新者是多个,但是更新操作不是原子的.那么 我们会通过update_with_dist_lock来进行. def fetch_with_dist_lock(mc_store, mutex_key, fetcher, upd ...
Global site tag (gtag.js) - Google Analytics