专注可用系统,分享所得
在上一篇文章《使用MongoDB存储Docker日志》中完成了Docker + Fluentd + MongoDB的基本配置。但是在实际的使用过程中,却发现Docker生成的日志并不会立即写入到MongoDB中,有大概1分钟左右的延迟。
日志是系统很重要的一个组成部分,通过日志可以及时发现系统中存在的问题,也可以为修复问题提供线索。Docker提供了多种插件方式管理日志,本文就对使用MongoDB存储Docker日志的过程做个记录。
问题描述: 在新装的CentOS7上,安装了MongoDB3.4,挂载了一个大的数据盘后,修改/etc/mongo.conf,将配置文件中的log和data目录放在新的数据盘下,并修改文件的访问权限。
文本替换是字符串的基本操作,Python的str提供了replace方法: src = '那个人看起来好像一条狗,哈哈' print(src.replace(',哈哈', '.')) 上面代码最后的输出结果是: 那个人看起来好像一条狗. 对于习惯了Java中的replace,Python的replace用起来有些不适应,因为后者不支持直接使用正则表达式。
这两天在更新CentOS7系统时,出现了Multilib version problems错误,执行命令: # yum update 出现了的错误信息: .... ---> Package libcap-ng.
搭建一个真实可靠的回测可以对实盘操作具有一定的参考和指导意义,之所以说“一定的”,是因为回测并不能完全模拟到真实的环境,比如策略是收盘价卖出,那么在实盘中,只有到了收盘那一刻才知道收盘价是什么,但是也已经无法进行交易了。
TooManyClauses问题 问题描述 在搜索时,遇到了下面的Response: "caused_by":{"type":"too_many_clauses","reason":"maxClauseCount is set to 1024"}}}],"caused_by":{"type":"query_shard_exception","reason":"failed to create query: 原因 查询中需要对某个字段做terms搜索,传入的候选条件过多。
空间换时间的最常用场景就是缓存,为了提高性能可以设置不同类型的缓存。下面是我遇到的一个小问题。 问题描述 在统计股票的历史收益时,涉及到对交易日的操作,比如获取某个日期偏移一定天数后的交易日。
表与表之间的关联基本上是所有业务系统都存在的,RDBMS通过外键实现,MongoDB通过嵌入式子文档解决,那么Elasticsearch怎么解决这个问题呢?答案就是Parent-Child关联(参考文档) 业务场景 有一个广告的分发系统,为了更精准的做广告的推送,除了自身积累的数据以外,还会从其他合作方通过数据交换(当然这些都是脱敏的数据)的方式获取更多用户行为数据,例如从音乐网站获取听的音乐列表、从购物网站获取最近的购物类别、从书评网站获取最近浏览的图书等等。
Python够直接,从它开始是个不错的选择。 Elasticsearch客户端列表:https://www.elastic.co/guide/en/elasticsearch/client/index.
Kibana为快速熟悉Elasticsearch的操作提供极大的便利,下面就通过kibana熟悉几个基本的操作。 创建索引(index) 在Kibana中打开Dev Tools,会打开如下图所示的操作界面: 左侧是命令窗口,右侧执行的结果。
安装Elasticsearch 根据文档的说明,安装过程十分简单。系统环境:CentOS 7 下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.
Elasticsearch的说明文档中,基本概念(Basic Concepts)一节中提到了一些术语,结合实践经验,尝试重新理解一下。 Document(文档) 文档是Elasticsearch存储和建立索引的基本单位,比如一篇文章、一条数据库记录等,通过JSON格式被添加到平台。
这是一位新同事和我关于如何快速学习的邮件对话,重新进行了整理。 现在有个困惑,之前你说在公司要快速的学习,可能之前接触java不是很多,在进行项目开发时,发现好多框架的代码看不懂,所以也就无从下手,感觉好多东西要学,而又不知道先学哪个,这样就又陷入了学习看书的情景,工作就耽搁了。
最近在一个项目中尝试通过Hybrid的方式开发客户端程序,来尽量降低由于程序业务逻辑或者显示界面的改变而来的升级困扰。Hybrid的方式就是本地代码和HTML5应用相结合的方式,其中本地代码负责和底层的硬件打交道,通过WebView提供的接口将硬件数据传递给运行其中HTML页面。
昨天添加一个新的代码库,需要对子目录做读写权限的控制,本来是一件很简单的事情: Cent OS上配置Apache2 + SVN(续)实现对目录访问的精确控制 可是添加完成以后,就出现了问题了。 [repo:/] user1 = rw user2 = r user3 = r [repo:/client/] user2 = rw [repo:/server/] user3 = rw 三个用户都可以正常Checkout。
在进行数据访问的单元测试,一般都会新增数据记录的情况,那么在设置数据集一般会是: 然后在测试方法中,通过验证新增的记录数或者新增记录的内容,确保被测试方法正确执行: @Test @DatabaseSetup("user/UserService-addUser-dataset.
今天遇到了一个很奇怪的问题,纠结了好久。在和同事念叨这个问题时,突然想到了问题所在。 问题现象: 在一个Service的单元测试类中有八个测试用例,单独运行时都可以正常通过。
在完成了数据访问层的单元之后,接下来看如何编写服务层(Service)的单元测试。服务层应该是整个系统中得重中之重,严密的业务逻辑设计保证了系统稳定运行,所以这一层的单元测试也应该占很大比重。
在编写数据访问层的单元测试时,遇到不少问题,有些问题可以很容易Google到解决方法,而有些只能自己研究解决。这里分享几个典型的问题以及解决方法。 先交代一下用到的测试框架 Spring Test + SpringTestDbUnit + DbUnit。
在上一篇中,完成了对测试用数据源的配置。下面继续构建可运行的测试。 三、使用DBUnit管理数据 测试的维护一直是我比较头疼的问题,期望可以有一个比较易于维护和可复用的方法来管理这些数据。
翻看之前的文章才发现,最近一次记录持续集成竟然是3年前,并且只记录了两篇,实在是惭愧。不过,持续集成的这团火焰却始终在心中燃烧,希望这次的开始可以有些突破。 测试是持续集成的基石,没有测试的集成基本上是毫无意义的。
今天被一个问题困扰,有一个页面在浏览器(无论是手机还是PC)上运行良好,而通过WebView就出现了问题,有两个值得计算始终出错。于是就通过alert,把这个值显示出来,发现和浏览器上计算的结果差了很多,本来是正数,却变成了负数。
今天把PC从一个有代理的环境中移了出来,开机后的第一件事情就是把所有应用中的代理设置去掉,当然也包括TortoiseSVN。通过TortoiseSVN的Context Menu --> Settings -->Network ,把Enable Proxy Server前面的勾去掉。
这两天又开始学习在VS2008种用WPF编写Windows应用程序,遇到了不少小问题。 下面几个错误困扰了好久: 已定义了一个名为“InitializeComponent”的具有相同参数类型的成员 已经包含“_contentLoaded”的定义 ... 类似的几个错误。
今天在安装配置nexus私服时,遇到了几个小问题: 1. 无法启动。 通过 ./nexus start启动时,会自动退出。通过./nexus console查看,发现时由于目录的权限问题,导致无法写日志和pid文件。
最近开发的一个项目一直存放在移动硬盘上,结果前天由于查了多个设备,盘符就变了,Eclipse也就找不到了项目。把项目拷回本地磁盘后,重新打开。直接Run On Server,提示ClassNotFoundException,找不到Spring ApplicationContext。
最近不得不开始寻找新的工作机会,面试是必不可少的环节。最近几次的屡屡失败,也让陷入思考,或许自己一直被幸运关照,能顺利加入到一个个令人兴奋的团队,认识一批批珍贵的同事。细细想来,也许以下几条是失败的主要原因: 1、非科班出身,基础知识薄弱,尤其是算法。
Remine、Apache和Git这个三个软件,无论哪一个,单独说来安装、配置和使用都是非常方便的,可是想把它们结合起来,却不是那么容易的事情。这里就把这一周来遇到的种种问题记录下来。
现在Git已经是铺天盖地了,如果再不用尝试真的是要out了。于是决定在新的项目中应用Git。奋战了一个下午加另外2个小时,终于搞定。发现Git真的真的是很简单,超出我的意料。可是既然简单,为什么又是艰难的呢?因为从之前CVS、SVN的思路和使用习惯转过来的确有点费劲。
今天看了《布道之道》,里面有些提到的很多经验的确很实用。不仅又想起了,在刚刚参加工作时,在第一家公司里就进行了如何提高沟通效率的培训。当时很多都以自身的经历,说明了沟通的重要性,也分享了一些沟通技巧。
在最近的一个项目中,每次的周总结会议上对项目进度的衡量都是最重要的一个环节,也是花时间最长的一个环节。每次大家都会说:我完成了50%,我完成了80%,我完成了90%…… 但是我心中一直有一个疑问:这个百分比对项目真正进度的衡量有多大意义呢?在当前的这个项目中,我看到的现象就是,大家都说自己的功能完成了多少多少,可是测试人员却没有可以测试的功能,更别说达到上线标准的东西了。
这些天最受全社会关注的话题就是火车票,最让网民无奈地就是12306购票网站,最让程序员痛快的就是大骂12306网站的架构里的诸多愚蠢的做法。 老实说刚开始的时候,单从用户体验上已经让我对12306的售票网站失望之极:每次都要登录,每次登录都告诉我访问人数过多,每次的失败信息还显示在不同的位置(一会儿在登录表单下面,一会儿弹出),好不容易定上了两张票还不能连号…… 事情过后,静下心来,仔细想想,反复问自己一个问题:如果让我来做,我又能做到几分?!也许我可以优化我发现的问题,但是可能很多地方更超出了我的技术能力。
在上一篇《从零开始配置MySQL MMM》中,在64bit的RHEL6中安装和配置MySQL-mmm。这两天又拿到了一个全32bit的CentOS 5,在配置过程中有遇到了一些其他问题。 一、依赖问题 因为这个环境中无法通过yum直接安装mysql-mmm,所以只有通过下载安装文件进行安装。
前些天尝试了phpMyAdmin,功能全面,也很好用。之前也看到过NoSQLFan推荐的一些MongoDB的管理工具,于是就想拿来试一试。《MongoDB管理工具》里推荐了好几款试用的工具,一眼就相中了rock_mongo ,事实证明选择很正确,还有中文文档 一、安装 安装十分简单,需要三个条件: 1.
刚才又一个一不小心,在Slave上执行了更改数据库schema的操作,结果是这台服务器在mmm_control中的状态就变成了:REPLICATION_FAIL。先通过writer执行了同样的操作,保证服务器正常运行,然后就考虑把这台slave重新拉回到mysql-mmm阵营。
自从用了Eclipse以后就再也没有更换过IDE,虽然期间也尝试过NetBeans、Idea等,但是总感觉用起来不顺手,快捷键也找不到,最后还是回归了Eclipse。不过,Eclipse偶尔也会耍耍小脾气,出现一些莫名其妙的问题。
前几天要在项目中增加一个新功能用来监控某些模块的运行情况,自然就想到了使用Spring的AOP来实现。之前已经有类似的AOP代码,使用的是Schema-based形式配置的,也就是在Spring的ApplicationContext.xml中加入了: sampleService sampleAdvice 其中sampleService和sampleAdvice都是通过: 自动引入的。
估计是糗百看多了,总是先要交待一下背景。 几天前网站突然不能访问了,页面上除了框架没有任何内容。从系统的运行日志看到的错误信息有: Communications link failure The last packet successfully received from the server was 7,875,055 milliseconds ago.
在最近的项目中,为了便于分析把项目的日志都存成了JSON格式。之前日志直接存在了文件中,而MongoDB适时闯入了我的视线,于是就把log存进了MongoDB中。log只存起来是没有意义的,最关键的是要从日志中发现业务的趋势、系统的性能漏洞等。
在上一篇文章《在CentOS5.6上安装Node.js》中,只用简单的几步就完成了安装。虽然看起来安装都是成功的,但是实际如何就要求我们写一个程序来进行验证一下。由于最近也在学习MongoDB,所以就写一个读取MongoDB数据库:计算actionId为772的日志总数。
之前听说过Node.js,只是知道它可以应用于服务器端,但是对很多具体的东西并不了解。今天在QCon上听了袁锋的分享《Node.js脱离了浏览器的Javascript》之后,顿时有了想立刻试一下的冲动。
最近想进一步学习一下MongoDB,而很久之前使用过ROR,正好也凑个机会重新拾起来。下面是建立第一个项目的过程。 主要参考文档: 1. Rails 3 - Getting started 2.
云平台是个好东西,MySQL-mmm的典型配置是需要五台机器,一台作为mmm admin,两台master,两台slave。一下子找五台机器真不容易,何况还要安装同样的操作系统。而有了cloud,简单几步就有了完备的实验环境:四台数据库服务器和一台管理服务器(Memory:8G,CPU:2G,Disk:128G,64bit RHEL6)。
最近在项目的生产环境中使用了mysql-mmm来提高数据库的可用性和处理能力。在项目初期,mysql-mmm安装、配置和部署对我们开发人员一直都是透明的。于是一个“美好”的愿望开始在心中滋生:我们不需要管理数据库,一旦有问题就会系统管理人员过来修复。
由于在9月30号粗暴地打断了一个导入进程,今天发现MySQL竟然不能启动了,只好卸载重装(也许可以花些时间查找问题,但是这个来的更快些)。重启导入进程,却出现了数据库已存在的提示信息。
前几天参加了HTML5研究小组的翻译送书的活动,有幸获得了一本《云计算和SOA》。第一次看到SOA这个名词还是在《程序员》杂志,同时还伴随着另外一个名词就是SaaS。又过了几年开始听到有了云计算的概念,但是并不了解此为何物。
如今,在Apple和Android的应用商店中应用的总数量几愈400,000,那为什么还会有人想用移动Web应用呢?开放性和公平的竞争环境 是Web开发者不断前进的动力。 也许HTML5才刚刚崭露头角,但是它肯定下一个重磅炸弹,引起的关注也将会超过Internet本身。