IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者
首页 / 五四陈科学院
IT 2011-11-13 21:34:00 / 累计浏览 2,640

quercus记录:php和java的混合型项目建立手记

这篇文章讲的是创业公司里常见的PHP与Java技术栈之争,以及如何用Quercus搭建一个混合项目来化解这种协作困境。作者从实际团队背景出发——成员技术栈多元、工程师之间互相不太认可——提出了一条务实的技术整合路径。 Quercus作为一个在JVM上运行PHP的引擎,让项目可以同时利用Java的稳定性和生态,以及PHP的灵活与快速迭代。文章手把手记录了从环境搭建到具体配置的混合项目创建过程,比如如何让Java类在PHP代码中被直接调用,如何处理两者之间的数据类型转换等关键步骤。这种整合不是简单地把两套代码放一起,而是通过Quercus这座桥梁,让它们能在同一个运行时里协同工作。 对于面临类似技术融合挑战的团队,这篇手记提供了一种可落地的解决方案。它没有停留在理论对比,而是给出了具体步骤和潜在注意事项,帮助读者评估这种混合架构是否适合自己的场景。

本机暂存
IT 2011-09-21 22:25:24 / 累计浏览 2,580

用supervisord管理杂乱的服务

这篇文章解决的是很多开发者都头疼过的问题:当项目越做越大,后台运行的进程也越来越多,包括Web服务、后台任务、监控脚本等,用传统方式逐个启停、手动检查状态,不仅效率低下,而且一旦某个进程意外退出,很难及时发现和恢复。 作者从这个混乱的运维场景出发,推荐了 `supervisord` 作为解决方案。文章详细介绍了如何通过一个配置文件,集中管理所有这些“杂乱的服务”。核心在于通过清晰的声明式配置,定义每个服务的启动命令、工作目录、日志输出位置以及异常退出后的自动重启策略。作者也对比了它与其他方案(如直接使用系统 `systemd` 或编写复杂shell脚本)的差异,指出了 `supervisord` 在跨平台兼容性和配置简洁性上的优势。 最终,引入 `supervisord` 后,所有服务的生命周期管理变得统一而透明。运维人员只需通过一个简洁的命令行工具或自带的Web界面,就能一目了然地查看所有服务的运行状态、集中查阅日志,并能轻松进行启停操作。它把运维从琐碎的“救火”中解放出来,让服务管理变得清晰可靠。

本机暂存
IT 2011-08-23 13:20:30 / 累计浏览 1,820

riak源码阅读手记一 初出茅庐 项目入口

这篇讲的是,作者从搭建Riak开发环境讲起,开启了对这个分布式KV数据库的源码阅读之旅。作为系列第一篇,文章聚焦于“项目入口”这一基础但关键的环节。 作者从如何获取源码、构建项目,到深入启动脚本一步步剖析。核心思路在于,追踪一个复杂分布式系统是如何从零开始“苏醒”的。例如,文章细致展示了从顶层Makefile到Erlang VM启动的完整链条,梳理了Riak在启动时如何加载核心配置、初始化关键模块(如覆盖环),并启动承载实际服务的监督树(Supervisor Tree)。 其中的巧妙之处在于,作者点明了Riak将复杂的启动逻辑解耦到不同的配置文件和OTP应用中,并通过统一的riak命令进行编排,使得系统在保证灵活性的同时,启动过程依然有序可追踪。对于想理解大型Erlang/OTP项目启动机制的读者,这提供了一个非常具体的切入点。

本机暂存
IT 2011-06-22 00:16:14 / 累计浏览 3,340

hadoop hive安装手记

这篇讲的是Hadoop生态中数据仓库工具Hive的安装与核心优势。作者从实际安装部署出发,但重点落脚在Hive如何改变大数据处理的门槛:它将结构化的数据文件直接映射为数据库表,让你能用熟悉的类SQL语句进行查询,而不用从零编写复杂的MapReduce程序。 文章清晰地指出了Hive的“杀手锏”——极大地降低了学习成本。传统上,对海量数据做统计分析需要开发专门的MapReduce应用,这对许多数据分析师并不友好。而Hive允许用户通过简单的SQL语句,快速将查询转换为后台的MapReduce任务执行,把复杂的数据处理封装起来。这使得它特别适合于数据仓库的日常统计分析场景,让团队能更专注于业务逻辑本身。 简而言之,这是一篇强调实用性的指南,核心是向读者展示如何用更低的门槛,快速搭建起基于Hadoop的分析环境。

本机暂存
IT 2011-06-02 23:10:53 / 累计浏览 5,060

用hadoop hive协同scribe log用户行为分析方案

这篇讲的是如何用Facebook开源的分布式日志系统Scribe,与Hadoop生态中的数据仓库工具Hive搭建一套高效的用户行为分析方案。Scribe在官方示例中能支撑每秒高达200万条日志的高并发采集,而Hive则能将结构化日志文件映射为表,并通过熟悉的SQL查询转换为MapReduce任务执行,非常适合对海量日志进行灵活分析。 作者54chen在文中分享了自己实践Scribe和Hive的经验手记,核心在于解决如何让两者协同工作。具体步骤上,文章从创建与Scribe日志格式相匹配的Hive表开始,引导读者逐步搭建起从日志收集到分析查询的完整流程。这套方案的价值在于,它让企业可以充分利用Scribe在高吞吐日志采集上的优势,并结合Hive强大的数据仓库查询能力,从而低成本、高效率地完成用户行为等大规模日志数据的分析工作。

本机暂存
IT 2011-04-28 13:25:55 / 累计浏览 3,640

erlang学习手记

这篇手记记录了作者在Ubuntu 10.04系统下为Eclipse安装Erlang插件erlide的完整过程。对于想要搭建Erlang开发环境的同学来说,这是一个非常具体的实践参考。 文章从环境准备讲起,详细说明了需要先安装的Java运行时和Eclipse版本等基础依赖。接着,重点拆解了erlide插件的两种安装方式——通过Eclipse更新站点在线安装,以及手动下载插件包进行离线安装。作者不仅给出了清晰的步骤,还分享了在安装过程中可能遇到的典型问题,比如插件安装后无法识别已配置的Erlang/OTP运行时路径,并指出了解决这一配置问题的具体操作。 整个记录语言朴实,没有泛泛而谈,而是紧扣实际操作中的细节。对于初涉Erlang或受困于开发工具配置的读者,这篇手记能帮助避开一些常见的“坑”,顺利迈出编写第一行Erlang代码的第一步。

本机暂存
IT 2011-02-23 22:15:41 / 累计浏览 8,960

分布式日志系统scribe使用手记

这篇讲的是如何用Facebook开源的Scribe搭建分布式日志系统。作者从实际需求出发,介绍了Scribe的核心优势:它通过thrift协议传输日志,能轻松整合不同语言的项目,实现从本地到远程的统一日志收集。在性能上,Scribe示例配置的并发量可达每秒200万条消息,对于绝大多数应用来说,即便是最基础的配置也能保证远程日志收集的可靠性。如果遇到更高压力,还可以通过主从架构自动同步日志到本地,进一步提升稳定性。文章接下来会具体演示Scribe的安装与配置过程。

本机暂存
IT 2011-02-15 22:54:50 / 累计浏览 2,620

闲话maven m2eclipse不再支持nested module的原因

这篇讲的是Maven插件m2eclipse为何不再支持嵌套模块的深度分析。作者从Maven项目结构的实际应用场景出发,指出嵌套模块虽然理论上能更精细地划分项目,但在m2eclipse的实现中却带来了显著的工具链复杂性和维护成本。 文章的核心在于剖析这一技术决策背后的具体原因。作者详细说明,m2eclipse需要为每个嵌套模块同步元数据、管理依赖解析和刷新工作区,当模块层级增多时,这些操作会产生大量的I/O开销和计算延迟,直接导致IDE响应变慢甚至假死。更深层的问题在于,Eclipse平台的项目模型与Maven的模块化理念存在摩擦,强行支持反而会引发各种难以预测的构建与索引错误。 最终,作者指出这个取舍是基于工程化现实的考量:放弃对小众的复杂结构支持,是为了换取大多数开发者在常用项目结构下稳定、高效的工具体验。这也提醒我们,工具的设计哲学有时需要在理想模型与工程可行性之间做出权衡。

本机暂存
IT 2011-02-14 21:29:30 / 累计浏览 4,380

[java]如何优雅读取properties文件

这篇讲的是Java中读取配置文件(如properties或XML)的可靠方法。作者开门见山,直接对比了Files、Classpath Resources和URLs等多种加载方式,并指出虽然所有方法都能达到目的,但经验表明**Classpath Resources和URLs**是其中最稳健、最值得推荐的选择。 文章聚焦于如何高效读取name-value格式的配置(类似properties文件)。作者强调,只要涉及使用InputStream来加载资源文件,就应当考虑他所阐述的这套方案。其核心在于引导开发者采用更专业、更可维护的路径来处理配置加载问题,而非随意选用文件路径,从而提升代码的健壮性和项目的可移植性。 结论很清晰:在准备读取Java资源文件时,优先选用Classpath资源和URL方式,能让你的实现更优雅、更少出错。对于需要处理复杂配置结构或希望项目配置管理更规范的开发者来说,这是一个直接有效的实践指南。

本机暂存
IT 2011-01-10 23:15:04 / 累计浏览 3,580

用httpclient做压力测试时Too many open files的解决办法

这篇讲的是作者在使用HttpClient进行接口压力测试时,遇到了“Too many open files”的典型坑点。文章从一次实际的压测经历切入,清晰地描述了问题现象:程序运行一段时间后,便抛出文件描述符耗尽的错误,导致压测无法继续。 问题的根源在于对HttpClient的不当使用。作者在分析中指出,频繁地创建和关闭HttpClient实例,或者未正确管理其底层连接,会导致操作系统层面的文件描述符未能及时释放。在持续的高并发请求下,这些未关闭的句柄不断累积,最终突破了系统限制。 解决方案部分非常具体。文章强调,正确的方式是复用HttpClient实例,并利用连接池来管理网络连接。对于每次请求返回的HttpResponseMessage,必须调用其Dispose方法以确保资源释放。此外,文章可能还涉及了调整操作系统文件描述符数量限制的补充方案。 整篇文章没有停留在现象描述,而是深入到底层资源管理层面,给出了一套可操作的代码级最佳实践。对于需要进行性能测试或开发高并发HTTP客户端的开发者来说,这个来自实战的总结直接点明了一个容易被忽视的关键细节。

本机暂存
IT 2011-01-10 23:14:05 / 累计浏览 4,780

为flash建立socket安全策略文件服务器

这篇文章探讨了Flash socket通信中的安全策略文件服务器部署方案。作者从Flash强大的网络功能切入,指出一个关键矛盾:Flash允许通过TCP连接与服务器交换数据,但这意味着外部服务器可能借此穿透到内网,带来严重的安全隐患。为了解决这一问题,Flash引入了安全策略文件(crossdomain.xml)机制。 文章的核心方案围绕如何正确搭建和配置策略文件服务器展开。它解释了策略文件如何作为“安全握手”的一部分,在Flash客户端发起实际Socket连接前,先向指定端口请求该文件,以此声明允许哪些域访问本地资源。作者详细说明了策略文件的语法结构,以及服务器端必须确保在端口843监听并及时返回该文件,否则连接将被拒绝。 这篇内容并非简单介绍概念,而是深入到实施细节。它强调,忽略策略文件服务器的正确配置,是开发者经常遇到连接失败的根源。对于需要实现富网络交互的Flash应用开发者而言,理解这一机制是确保功能正常与系统安全平衡的关键一步。

本机暂存
IT 2011-01-06 22:17:27 / 累计浏览 4,340

如何在nginx的access log中记录post请求的参数

这篇讲的是移动开发中一个常见但容易忽略的细节:如何在Nginx的访问日志里,把POST请求携带的参数也记录下来。 许多团队在排查线上问题时,习惯直接查看Nginx日志来确认请求是否抵达以及携带了什么数据。但默认配置下,日志通常只包含GET参数,POST数据却是一片空白,这给调试接口、追踪数据带来了不便。 文章指出了问题的核心——默认的日志格式变量 `$args` 仅捕获URL查询参数。要记录POST参数,关键在于配置access log的格式时,使用 `$request_body` 变量。不过,作者也提示了一个实际陷阱:该变量仅在Nginx的请求体缓冲(request body buffering)开启且数据被读入后才可用,因此可能需要调整 `client_body_buffer_size` 等相关指令,确保POST数据被正常捕获。 简单来说,这不是一个深奥的架构难题,却是一个能实实在在提升调试效率的配置技巧。文章给出了从发现问题、理解根因到实施具体配置步骤的清晰路径,对于需要快速定位HTTP请求问题的开发者和运维人员来说,非常实用。

本机暂存
IT 2010-12-16 22:44:59 / 累计浏览 3,900

把手机当无线网卡-andriod usb0 ssh tunnle

小公司网络拥堵的问题几乎每个IT部门都遇到过:越来越多的台式机挤在有线上,网速越来越慢,而同一环境下的Wi-Fi反而表现尚可。这篇文章就从这个痛点出发,给出了一个巧妙且低成本的解决方案。 作者利用手边闲置的Android手机,通过USB连接将其模拟为电脑的无线网卡(usb0接口),并进一步结合SSH隧道技术。这样做的核心思路是,让原本只能连有线的台式机,通过手机的移动数据网络通道来访问互联网,从而将部分网络流量有效分流,缓解有线网络的压力。 文章具体分享了在Android设备上启用USB网络共享、配置SSH服务,并在电脑端建立隧道连接的完整步骤。方案的巧妙之处在于,它几乎无需额外硬件投入,就能将手机的蜂窝网络能力整合进办公网络,尤其适合临时扩容或解决特定区段的网速瓶颈。最终效果是,相关台式机的网络访问体验得到了立竿见影的改善。

本机暂存
IT 2010-12-08 22:13:08 / 累计浏览 3,320

企业服务器监控及报警配置打造(ganglia and nagios)-part 1

这篇讲的是作者54chen从自己的服务器环境——centos 5.5 x86_64操作系统出发,分享如何为企业搭建一套可靠的监控及报警系统。在IT运维中,实时掌握服务器状态并及时响应异常是避免服务中断的关键,但面对多服务器集群,手动监控显然力不从心。 作者选择了Ganglia和Nagios这两个经典工具的组合来解决问题。Ganglia负责收集和可视化性能数据,比如CPU、内存使用率等指标,而Nagios则侧重于事件检测和报警通知,两者结合能形成完整的监控闭环。文章详细介绍了从基础环境准备到工具安装配置的步骤,包括在centos 5.5上设置监控节点和定义报警规则,让读者能跟着一步步实操。 作为系列的第一部分,本文聚焦于搭建监控系统的基础架构,为后续的深入优化和扩展铺平了道路。通过这种配置,企业可以实现对服务器健康的自动化监控,减少人工干预,从而提升整体运维效率。

本机暂存
IT 2010-11-30 22:49:50 / 累计浏览 4,940

squid缓存失效之谜:一步步提高squid缓存命中率办法记录

这篇讲的是作者在运维一个自建CDN节点时遇到的诡异问题:Squid缓存服务器的进出流量几乎相等,完全没有体现出缓存“出多进少”的特性,这意味着缓存形同虚设。作者从这个现象出发,没有停留在表面抱怨,而是系统地拆解了导致缓存失效的多个可能原因。 文章详细记录了排查过程,包括检查缓存规则、分析访问日志、审视HTTP头信息等。核心发现指向了几个关键点:过于宽松的缓存策略导致大量动态内容被缓存、客户端和源头服务器发送的 `no-cache` 等头信息干扰了缓存判断,以及磁盘I/O性能瓶颈拖累了整体吞吐。作者并未停留在诊断,而是分享了具体的调整步骤,比如精细化设置 `cache_refresh_pattern` 以过滤动态请求,并优化了缓存目录结构。 整篇文章像一次现场故障复盘,技术细节扎实。它不仅解释了Squid配置中几个容易被忽略的参数,更重要的是展示了一种从现象反推系统瓶颈的排查思路,对于同样在维护缓存服务的工程师很有参考价值。

本机暂存
IT 2010-11-24 00:10:35 / 累计浏览 4,720

创业公司技术选型参考

这篇讲的是创业公司如何在资源有限的情况下做出务实的技术选型决策。作者从“生存优先”的视角出发,指出初创团队常陷入追求最新技术栈的误区,反而忽略了与业务阶段、团队能力和成本控制的匹配度。 文章的核心建议是:早期技术选择应围绕“快速验证”和“可替换性”展开。例如,数据库不必纠结于SQL与NoSQL的优劣,而是根据数据模型复杂度和查询模式决定;前端框架选择应考虑社区生态和团队熟悉度,而非单纯性能指标。作者还强调,技术选型清单需要定期重审,随着业务增长和团队扩张,原本合理的选择可能演变为技术债。 文章通过几个真实案例说明,盲目跟随大厂技术栈的初创公司往往在运维和迭代上付出更高代价,而那些聚焦业务需求、保持技术克制的团队反而能更灵活地调整方向。对于正在搭建技术底座的初创团队,这些基于经验的务实建议比单纯的技术对比更具参考价值。

本机暂存
IT 2010-11-15 22:33:21 / 累计浏览 3,420

android开发入门2:概念建立

作者从搭建好Hello World后的进一步探索讲起,分享了Android开发需要建立的核心概念框架。他将Android项目拆解为几大块:继承Activity的类相当于MVC中的Controller,负责业务逻辑;layout目录下的XML文件定义了界面布局,如同View层;values目录则存放字符串、颜色等常量资源,类似属性文件。 文章重点解读了layout/main.xml,指出其控件属性的写法与复杂性,类比了Web前端开发,提醒大小写敏感的细节。随后,作者用“胶水”一词形象地介绍了Intent的概念,它抽象描述了一个操作,负责在多个Activity组件间传递请求和解耦,是应用内导航的关键。通过拨号和启动新Activity的代码示例,让这个抽象机制变得具体可感。 整体上,这篇文章没有停留在表面介绍,而是通过与传统MVC、Web开发的类比,帮助初学者快速建立起对Android项目结构、界面构建和组件通信这几个关键支柱的直观认识。

本机暂存
IT 2010-11-01 19:57:26 / 累计浏览 19,520

android 开发入门

作者54chen记录了自己从零开始学习Android开发的全过程,重点分享了在Ubuntu系统下搭建开发环境并运行第一个“Hello World”程序的具体步骤。文章预设读者具备Java基础,跳过了语言基础,直奔主题。 核心内容分为两部分:一是环境搭建。作者详细说明了如何在Ubuntu 10.04上配置Eclipse、安装Android SDK和ADT插件,并配置了路径。特别提到了使用OpenJDK可能遇到的字体问题,以及SDK平台下载耗时较长等实际体验。二是编写并运行第一个程序。从创建项目、修改代码以动态显示“你好,世界”,到创建和使用Android虚拟设备(AVD),作者给出了清晰的代码示例和操作路径,并坦言虚拟机启动过程缓慢,需要耐心等待。 这是一份非常扎实的入门手记,对环境配置的每一步都描述得清晰具体,适合已有Java经验、想转向Android开发的开发者作为实操参考。

本机暂存
IT 2010-10-26 21:59:17 / 累计浏览 3,580

海纳百川――人人网海量存储系统Nuclear开发手记

这篇讲的是人人网技术团队在2009年面对业务快速扩张时,为应对评论数据聚合与线上读写需求,着手开发海量存储系统“Nuclear”的初期历程。 当时,来自不同业务线的评论数据量激增,系统必须同时承担高并发读写和极高的稳定性要求——任何宕机都可能影响大片业务。作者从这个现实压力出发,回顾了团队如何开始探索构建一套能满足这些苛刻条件的存储架构。 文章聚焦于系统诞生的背景与原始挑战,展现了在大数据场景下,技术选型与系统设计如何从实际业务痛点中一步步生长出来。Nuclear的命名,也寓意着其要像大海容纳百川一样,承载起庞大而关键的数据洪流。

本机暂存
IT 2010-10-21 09:06:20 / 累计浏览 4,260

国内互联网公司数据库访问层调查

这篇讲的是国内互联网公司的数据库访问层(DAL)技术选型与实践现状。作者通过调研不同公司的实际案例,横向对比了像MyCAT、Sharding-JDBC这类开源中间件,与自研数据访问层在架构设计上的核心差异。 文章重点拆解了大家普遍关注的几个维度:比如在连接池管理上,是如何平衡高并发与资源消耗的;在分库分表策略中,对一致性与复杂查询的支持程度有何不同;以及在读写分离的实现上,各自选择了怎样的数据同步方案。通过具体的架构图和代码片段,文章清晰地展现了不同方案背后的权衡取舍。 对于正在面临数据层扩展性挑战的团队来说,这份调查提供了一个扎实的参照系。它没有给出单一的“最佳答案”,而是帮你理清了不同技术路径的适用场景与潜在代价,便于你结合自身业务特点做出更合适的技术决策。

本机暂存