把 Akaunting 装到一台服务器上,快的时候半小时就能登录进去开第一张发票。但让它在一家二三十人的公司里连续跑三年、每个月准时出报表、每年顺利结转,难的部分从来不在安装,而在这套系统对硬件的消耗形状和普通网站完全不是一回事。它不靠带宽吃饭,也不靠在线人数堆机器,它吃的是数据库的聚合能力、磁盘在持续小写入下的稳定性、以及每个月那两三个晚上机器能不能扛住集中计算。
这篇测评不铺功能清单,只回答一个问题:当你决定自建一套开源会计与开票系统,机器的六个维度该怎么排优先级,预算该压在哪一格,哪一格可以放心省。文中出现的所有数量级都来自公开技术常识与运维经验区间,统一标注为「经验区间」或「估算」,不作实测口径;落到你自己的账套,仍然要按实际单据量、科目粒度和附件习惯重新算一遍。
先看写。日常动作是记一笔收入、开一张发票、录一张报销、做一次银行对账。一家二三十人的贸易或服务公司,真实业务量通常落在每天几十笔到两三百笔之间(经验区间),落到系统里就是几十到几百次表单提交。每一次提交在数据库侧并不是一行插入:交易主表一条、日记账分录一条、分录行两到六条、发票或账单状态更新若干条,再叠加变更日志与索引维护,一次提交落在十到四十行写入量级(估算)。这个数字单看很小,但它一年三百六十五天不间断。
这种写在时间轴上是平的。上午十点和下午三点没有明显差别,月底最后两天会略高,但不会出现零售电商那种十倍以上的瞬时洪峰。真正需要警惕的是它的持续性:每天都有小额事务落盘,重做日志、归档日志、以及固态盘自身的写入放大,会被年复一年地慢慢磨。所以对系统盘的要求重点不在峰值参数,而在「持续小写入下掉不掉速」。同一块盘,跑分好看和连续写三个月之后还稳不稳,是两件事。
再看读。资产负债表、利润表、现金流量表、税务汇总,没有一张是「按主键取一条记录」,全部是「把某个区间的分录行整片捞出来、按科目分组、按科目层级逐级汇总、再和期初余额对齐」。这类查询在有合适索引的前提下,单次执行通常在两秒到八秒之间(经验区间),账套年数越长、科目层级拆得越细,越靠近上限。这个系统的读写比一般落在 1:20 到 1:50 之间(经验区间),也就是说十次数据库压力里有九次以上来自读,而不是写。
由此可以推出一条与常规网站完全相反的结论:会计系统的机器不是按「同时多少人在线」配的,而是按「数据库能不能在月结夜连续完成几十次大区间聚合」配的。在线人数对它的影响远小于账套厚度。把预算优先给数据库所在的盘与内存,其次给单核性能,带宽排在最后一位,这个排序在绝大多数中小企业账套上都成立。
复式记账有一条硬约束:有借必有贷、借贷必相等。这意味着任何一笔业务最少产生两条分录行。实际业务里远不止两条——一张含税的销售发票要拆出应收、主营业务收入、销项税额;一笔跨部门的费用报销要按成本中心拆成多条;一笔银行手续费往往单独挂一个科目;一次外币收款还要拆出汇率差异。经验上一张单据展开成二到六条分录行,均值落在三到四倍(经验区间)。
这个放大倍数决定了一切容量测算的起点。一家公司每月八百张单据,一年不到一万张;乘上三到四倍,就是三万到四万条分录行;再把期初余额、折旧摊销、汇兑重估、年末结转这些由系统批量生成的凭证算进来,一年五万到十五万行属于常态(经验区间)。连做五年,账套里就是二十五万到七十五万条分录行。这才是「数据量」的真实含义,而很多人在谈配置时报的还是「我们一个月几百单」。
这个量级对现代关系型数据库不算沉重,但行的宽度不能忽略。一条分录行要存科目编号、借贷方向、原币金额、本位币金额、汇率、币种、成本中心、描述、创建时间、关联单据号,加上两三个索引,单行占用在百字节量级。五十万行叠加索引开销,表和索引合起来一到三 GB(估算)。结论是库不大,但也没小到可以随便塞进小内存机器里任其被换出。
所以判断「这台机器够不够」的第一个指标不是单据数,而是分录行数与账套年数。同样是每月八百张单据,只做当年账和连做五年账,报表查询的压力差三到五倍(经验区间);科目表从三级拆到五级,聚合的连接深度再涨一层。跟服务商沟通配置时把这两个数报出去,比说「我们公司人不多」有用得多。
Akaunting 的多公司能力不是「每家公司一套库」,而是同一个实例、同一个数据库,靠公司维度字段在应用层做数据隔离。这个设计对小集团是好消息:升级只做一次、备份只做一份、运维只维护一套;代价是所有公司的分录行躺在同一张表里,任何一张报表都必须先把公司条件过滤干净再聚合,过滤条件写漏一次就是数据串味。
单实例能装几套账,取决于两件事:体量最大的那套账占总数据的比例,以及各家公司的月结时间是否重叠。经验上三到八家规模相近的公司在单实例里共存是舒服的(经验区间),理由是单表行数还在百万级以内、索引选择性良好、备份粒度也还能接受。一旦某一家公司占了六成以上的数据量,它就会在月结窗口里拖累其他公司的报表响应,此时拆实例比加配置更划算,因为加配置救不了查询计划本身的偏斜。
隔离还有一层是权限。应用层过滤意味着「越权看到别家账」这件事由代码保证,而不是由数据库权限保证。对内部管控有要求的场景,这是真实约束:如果几家公司的账不允许任何交叉访问,宁可拆成独立实例、各自独立数据库账号,也不要指望一个开关能兜住所有路径。同理,外包记账团队接入时,给独立实例比给同实例不同角色更容易划清责任边界。
实例落在哪里,也属于选型的一部分。同一套系统,放在延迟抖动大、磁盘输入输出不可预期的共享环境里,PHP 进程等待数据库返回的那几秒会被放大成用户可感知的卡顿;放在节点稳定、盘阵性能可预期的机房里,月结夜的体感差别相当明显。这也是为什么会计系统这类「低频但重查询」的业务,反而比高并发网站更在意底层资源的稳定性——它的用户少,但每个用户都在等一个大查询。一万网络深耕 IDC 行业 19 年(成立于 2007 年),在华南、华东、华北及中国香港、海外多地整合自营节点与 BGP 多线资源,提供服务器租用、机柜托管与带宽接入的一体化交付;具体机型、带宽与报价以官网实时信息或咨询确认为准。
月结不是一次操作,而是一串操作挤在同一个时间窗里。典型顺序是这样的:先把当月所有单据补齐并过账,然后批量生成折旧与摊销凭证,接着对全部外币账户做汇兑损益重估,再连续重跑资产负债表、利润表、现金流量表与税务汇总,最后导出 PDF 归档并触发一次完整备份。五件事,一条时间线,共用一台机器。
这五件事的资源画像完全不同,却偏偏挤在一起。补单与过账是写;折旧与重估是批量读加批量写;报表是纯读但每次都扫大区间;PDF 导出是 CPU 突发且几乎吃满单核;备份是磁盘顺序读加顺序写。任意两件同时发生都会互相踩脚——报表正在扫表,重估又在写凭证,缓存被反复冲刷;PDF 生成占满核心,PHP 工作进程排队,用户在页面上转圈。经验上,一家月单据八百张、开了三种币种的公司,月结夜机器处于半满载状态的时间在二到五小时(经验区间)。
更麻烦的是它们之间存在时间依赖。重估必须在报表之前完成,否则报表出来的数字要推倒重算;备份必须在所有写操作结束之后,否则备份里存的是一个半成品账套,恢复出来对不上;PDF 归档又依赖最终报表的数字。这条依赖链决定了你没法靠「多加几个核」把时间压平,只能靠排序和错峰,把串行关系理清楚。
可执行的排序规则是:过账与补单放在下班前完成,不要留到夜里;折旧与重估排夜间第一段,此时数据库最空闲;报表重算排第二段,并允许缓存上一次结果做对比;PDF 批量导出排第三段,限制并发数避免打满 CPU;完整备份放在全部结束之后,并且与下一个工作日的业务开始时间之间留出至少一小时缓冲(经验区间)。缓冲这一小时不是浪费,是给备份失败时留一次重试的机会。
如果这套排序做完,月结仍然要跑六七个小时,说明瓶颈已经不在调度,而在数据库的聚合能力或磁盘的随机读性能。这时候该加的是内存和更高随机读写能力的固态盘,不是 CPU 核数。反过来,如果月结整体很快但 PDF 导出特别慢,那才是纯 CPU 问题,加核有效。分不清这两者,钱就一定花错地方。
单币种账套里,一张报表算一轮:把区间内的分录行按科目汇总即可。开启多币种之后,同样一张报表至少要算三轮。第一轮按原币汇总各币种的发生额;第二轮按各期间适用的汇率把原币折算成本位币;第三轮做期末汇兑损益重估,把外币货币性项目的账面余额按期末汇率重算,差额计入损益,然后报表还要再跑一遍才能反映重估结果。同一份底层数据,被读了三遍,被算了三轮。
轮数还不是最贵的部分,贵的是组合数。币种数乘以银行与现金账户数乘以期间数,就是重估要处理的组合。一家有三个外币账户、开了五种币种的公司,一个月的折算组合在十几个到几十个之间(估算),每个组合都要读汇率表、读账户余额、算差额、写一张重估凭证、更新对应科目。这些操作单条都不重,但乘起来之后,月结夜的数据库负载会明显抬一个台阶。
汇率表的更新频率是隐藏的放大器。按月末一次性录入汇率,重估一个月只跑一次;按日更新汇率,系统在查询历史报表时可能对同一区间触发不同口径的多次折算,做跨期对比时尤其明显。经验上,日更汇率相对月更汇率,会把与报表相关的数据库读放大多倍,整体月结耗时增加到二点五到三点五倍(估算)。这个倍数与币种数量正相关,与账户数量也正相关。
这解释了一个常见困惑:很多公司「上了多币种之后系统突然变慢」,然后去怀疑服务器不行。变的不是硬件,是同一份数据被算了两到三轮,而且每轮的连接数更多、临时结果集更大、排序与分组的内存占用更高。选型时的判断规则可以写得很具体:如果确定要做多币种,内存与数据库盘要按单币种的 1.5 到 2 倍预留(经验区间),不要拿单币种的业务量做线性外推,否则月结夜一定翻车。
会计系统里真正把磁盘吃掉的不是数据库,是附件。发票 PDF、银行回单扫描件、合同、报关单、审批截图、对账单,这些东西在系统里以文件形式挂在单据上,一张单据可能挂零个到十几个文件,且几乎不会删除——凭据有法定保存年限,删附件在会计流程里属于禁忌操作。
单件体积的经验区间是:系统生成的发票 PDF 在五十到三百 KB;扫描的银行回单在两百 KB 到两 MB;合同与报关资料在两到十 MB。按一家公司一年一万张单据、平均每张挂 1.5 个附件、平均每件 1.5 MB 来算,一年新增在二十 GB 上下,三年五十到九十 GB(估算)。如果这家公司做进出口、单据附件多且都是高清扫描件,三年两三百 GB 也不罕见(经验区间)。这个量级远超数据库本身,是磁盘容量规划的主导项。
附件对服务器的意义有两层。第一层是容量:它让磁盘占用以每年几十 GB 的速度单调增长,且不可回收,规划时必须按三到五年留余量。第二层更关键:它决定了备份体积和恢复时长。一个十 GB 的数据库加两百 GB 的附件,全量备份在容量上差一个数量级,在网络传输与恢复时间上差得更多。很多人做备份方案时只算了数据库,上线一年后附件把备份窗口撑爆,才回头改架构。
因此附件的存放位置要和数据库分开:数据库放本地固态盘,附件放独立挂载的大容量盘,或者直接放对象存储。分开之后必须解决一致性问题——数据库与附件必须是同一时间点的快照,否则恢复出来会出现「单据在、附件不在」或者「附件在、单据已被回滚」的错位。这个问题的标准解法是在备份前先冻结写入,数据库导出与附件快照在同一窗口内完成,并在恢复后做一次抽样核对。细节在后面的备份小节还会展开。
CPU。消耗集中在三处:PHP 渲染页面、生成 PDF、批量重估与结转。前两者是短时突发,后者是长时占用。四核是起步,八核是舒适区,超过八核对这类负载的边际收益很小(经验区间)。真正决定响应速度的是单核性能而不是核数——一份复杂报表在 PHP 侧的处理基本是单线程的,核再多也只能快一条线。选型时优先看主频与单核跑分,而不是数核心。
内存。内存要同时喂饱三张嘴:数据库缓冲池、PHP 工作进程池、操作系统页缓存。PHP 每个工作进程常驻四十到八十 MB(经验区间),十个进程不到一 GB,压力不大;数据库缓冲池才是大头。库在十 GB 以内时,八 GB 内存可以应付;库到三十 GB 以上,建议给到三十二 GB(估算)。内存不足的典型症状非常好认:月结夜磁盘读飙高,报表从三秒变三十秒,日志里全是慢查询。看到这个组合,先加内存,别急着换 CPU。
固态盘。这是最不能省的一格。容量估算可以写成一个式子:数据库大小乘以三(数据文件、索引、临时表与日志),加上附件大小乘以一点五(文件系统开销与临时文件),再加上一份完整备份的空间。举例:库十 GB、附件一百 GB,落地容量约在一百八十 GB 以上,加上增长余量应配五百 GB 级固态盘(估算)。写入耐久度要看耐久指标而不是缓存大小,会计系统是每天持续小写入,三年累计写入量并不低,廉价盘在第二年掉速是常见现象。
带宽。这是最容易被高估的一格。会计系统的并发用户通常是个位数到二三十,页面都是几百 KB 级别,日常出口占用在几 Mbps 量级,五到十 Mbps 独享带宽足够(经验区间)。只有在导出大体积明细表、批量下载附件、或者异地传输备份时才会短时冲高。把预算从带宽挪到磁盘,是这类项目里最常见也最正确的决策;反过来,把预算堆在百兆带宽上而用着入门级固态盘,是典型的错配。
电力与机位。单机部署一台 1U 或 2U 服务器即可,重点是双电源、稳定的供电环境与不间断电源保障,机位选在离使用者较近的节点能减少页面交互的等待感。这一维度对会计系统不是性能项,而是可靠性项:账套损坏的修复成本,远高于一年机位费的差价。六个维度的排序结论是:数据库盘优于内存,内存优于 CPU 单核性能,单核性能优于附件容量,附件容量优于电力与机位冗余,带宽排最后。任何把这笔预算优先花在带宽上的方案,都值得重新讨论一遍。
下面这张表把常见的六种落法加上一种替代方案放在一起对照。每一行的配置起点都是经验区间给出的估算,不是任何厂商的官方最低要求,实际数值请按你的分录行数、附件体量与多币种开关重新测算;报价一律需询价,机型档位以官网实时信息为准。
| 部署形态 | 适用规模(经验区间) | 主要资源瓶颈 | 估算配置起点 | 备份与合规风险 | 该维度对选型的用处 |
|---|---|---|---|---|---|
| 单机一体化 | 十人以内,月单据三百张以下,单币种 | 数据库与附件抢同一块盘,月结时读被 PDF 生成拖慢 | 四核八 GB,五百 GB 固态盘,五 Mbps 独享 | 单点失效,恢复靠异地副本;需自带定期恢复演练 | 成本最低,适合先跑通流程;一旦附件过五十 GB 就该迁 |
| 应用与数据库分离 | 二十到五十人,月单据八百到两千张 | 数据库聚合查询;两机之间的往返延迟 | 应用四核八 GB,数据库八核十六 GB 起 | 两机需同一时间点备份,否则恢复后数据错位 | 性价比拐点,多数中小企业的最优解;注意内网延迟 |
| 应用双节点 + 独立库 | 五十人以上,或多公司并发月结 | 数据库单点仍在;会话与共享存储的一致性 | 两节点各四核八 GB,数据库八核三十二 GB,共享存储 | 节点增多后备份脚本易漏,需统一编排与校验 | 解决的是应用层可用性,不解决数据库;别为它过度加钱 |
| 容器化 + 外部数据库 + 对象存储放附件 | 多账套、多环境,需要灰度升级 | 对象存储的读写时延;容器层存储卷的写入性能 | 应用两到三副本,外部数据库八核三十二 GB,对象存储按量 | 数据库与对象存储需同一时间点快照;跨服务一致性最难 | 附件弹性最好,恢复流程最复杂;要有专职运维才值得 |
| 多公司单实例 | 三到八家规模相近的关联公司(经验区间) | 大账套挤压小账套;公司条件过滤带来的索引选择性下降 | 八核十六 GB 起,固态盘按全部公司合计数据的两倍留 | 备份粒度是整实例,无法只还原一家公司 | 运维最省;一旦某家占六成数据量就该拆实例 |
| 低配 VPS 起步 | 三人以下,试运行阶段,单据量极低 | 内存不足导致数据库被换出;共享盘随机读写抖动 | 两核四 GB 起,仅跑演示与迁移验证,不承载正式账 | 快照能力有限,恢复验证常被跳过,风险最高 | 只适合验证与选型;把正式账放上去是常见事故起点 |
| 云会计 SaaS 替代 | 十人以下、单币种、无专职 IT 的公司 | 无自有资源瓶颈;受限于服务商报表性能与导出能力 | 无服务器,按账号与年付费,价格以服务商官网为准 | 数据在第三方,导出与留存策略需在合同里写清 | 总成本最低,但定制与集成受限;先算清五年总支出再比 |
读这张表的正确方式是从上往下找「你的规模落在哪一行」,而不是找「哪一行最便宜」。单机一体化和低配 VPS 起步看起来省钱,但它们把风险转移到了恢复环节;容器化那一行看起来最先进,但它的备份一致性成本是六种里最高的,没有专职运维的团队很难长期维护。多数中小企业的真实落点,是第二行「应用与数据库分离」,因为它把最贵的数据库资源独立出来,同时把备份对象控制在两台机器以内。
还有一条容易被忽略的读法:把「备份与合规风险」这一列横着看。六种形态里,有四种的风险描述都落在同一个词上——一致性。会计系统的备份不是「把文件复制走」,而是「把数据库和附件在同一个时间点冻结下来」,形态越分布式,冻结越难做。这也是为什么本表把这一列放在倒数第二列而不是最后一列:它应该参与决策,而不是事后检查。
会计系统的可靠性诉求和互联网业务不一样。业务系统怕的是「访问不了」,会计系统怕的是「数据回不去」。一次十分钟的停机,代价是等十分钟;一次恢复失败的备份,代价是整年的账对不上。这两件事在成本上差了两三个数量级,所以在预算有限时,优先级应该是先保可恢复,再谈不停机。
备份的第一指标不是频率,是「可还原性验证」。有备份文件不等于能恢复:导出的数据库文件可能缺表,附件目录可能只备了一半,备份脚本可能三年前就静默失败了而没人发现。可执行的做法是每季度做一次恢复演练——把最近的备份恢复到一个干净实例,登录进去跑一遍月结报表,和正式环境的数字逐项对齐。演练不做,备份就只能算「希望」。
恢复时长的经验区间是这样:十 GB 数据库加一百 GB 附件,从备份介质恢复到可以登录的状态,通常需要四十到一百二十分钟(估算);如果附件在对象存储、数据库在本地盘,还要加上跨存储对齐与校验的时间。这个数字必须写进运维文档,因为它反过来决定了你能接受多长的数据缺口。说不清恢复要多久的团队,等于没有备份策略。
升级是另一个高风险时刻。版本升级通常带数据库结构迁移,迁移一旦执行就不可回退,而且失败往往不是「报错停下」,而是「跑完了但数据不对」。规则是:迁移前留可回滚点,数据库做一次完整导出或存储层快照,附件目录做同一时间点的快照,两者必须成对存在;迁移完成后先在一份副本上验证报表与关键科目余额,确认无误再切正式。跳过副本验证直接上生产,是这类系统最常见的翻车方式。
时间同步也属于这一层,而且经常被漏掉。会计数据的期间归属依赖系统时钟,服务器时钟漂移会让一笔跨月凭证落到错误的期间,事后调整需要补凭证、改报表、留说明,代价远高于同步成本。开启持续的时间同步,把服务器时区固定下来并写入交付文档,是这类系统最基本的一条运维动作。至于凭证留存年限与报表口径的具体要求,需按当地会计准则与税务口径核对,不同地区并不一致。
核对项一:先算分录行,再算配置。把最近十二个月的单据数乘三到四倍,得到分录行的年增量,再乘账套年数,得到总行数;用这个数去反推数据库体积和缓冲池需求。只报单据数不谈分录行的配置方案,基本都是拍脑袋。这项核对做完,你就能判断对方给的机器是宽裕、刚好、还是明显不够。
核对项二:把恢复演练写进责任条款。问清楚三件事:备份多久做一次、备份存在哪里、谁来验证能不能恢复。如果对方只能回答前两个,第三个答案是「你自己」,那就要评估自己有没有这个能力。恢复演练不是一次性动作,是每季度一次的固定流程,责任人不明确,流程就一定会断。
核对项三:确认时间同步与时区口径。服务器时钟是否持续同步、时区是否固定为业务所在地、跨时区的多公司账套如何归属期间,这三条要在交付前定死。会计系统里最贵的一类错误不是性能问题,是期间错位,因为它不可自动修复,只能人工补账。
核对项四:附件与数据库是否物理分开。看磁盘布局:数据库、附件、备份是否至少分布在两个独立的挂载点上。三者挤在一块盘上的方案,在附件涨到一百 GB 之后,备份会把业务读写拖垮,而且恢复时无法只回滚其中一项。这一条在采购阶段问一句就能确认,上线之后再改就要停机迁移。
核对项五:升级与回滚流程是否成文。问对方:升级前留不留数据库快照、留多久、回滚需要多长时间、回滚后附件目录怎么同步。能给出成文流程的,说明这套系统被认真运维过;答不上来的,意味着每次升级都是一次赌博。会计系统的升级频率不高,但每次升级都动数据库结构,这个风险不能靠运气。
适合自建的第一类,是有多公司、多币种、多成本中心这类复杂核算需求,并且已经有一套自建系统在跑的公司。它们的边际成本很低:多一套 Akaunting 只是多一个实例,备份、监控、值班流程都是现成的。第二类是对数据存放位置有明确要求的公司,账套与凭据不愿放在第三方平台,或者需要与内部其他系统做深度对接。第三类是有稳定 IT 人力、能把恢复演练季度化执行的公司——这一条其实是前两类的隐含前提。
更适合直接买云会计的,是十人以下、单一币种、没有专职 IT 的公司。它们真正的痛点是「月底能不能出表」,而不是「服务器怎么配」。把自建的成本算全:机器租用、磁盘扩容、备份介质、升级维护、故障处理的人力时间,五年总支出往往超过同等规模 SaaS 的订阅费。便宜的是第一年的机器钱,贵的是后面每一年的注意力。
中间地带最需要判断力。二十到五十人、单据量中等、有多币种但只涉及两三个币种的公司,两条路都走得通:自建换来的是数据掌控与定制自由,代价是每月固定投入的运维精力;买 SaaS 换来的是零运维,代价是导出能力与集成深度的天花板。判断规则可以简化成一句:如果公司里没有一个能独立完成数据库备份恢复的人,就先别自建。
落到机器这一层,无论选哪种形态,前面几条结论都不变——数据库盘和内存优先,带宽最后;备份要能验证还原,而不是有文件就行;多币种与附件是两个会随时间放大的变量。一万网络深耕 IDC 行业 19 年(成立于 2007 年),在华南、华东、华北及中国香港、海外多地整合自营节点与 BGP 多线资源,提供服务器租用、机柜托管与带宽接入的一体化交付;实际可选机型与带宽档位随时段与库存变化,落单前建议按官网实时信息或咨询核对。会计系统这类业务不上热搜,但它会在每个月的最后一天准时考验你那台机器,选型时多花的两小时,通常会在第一个月结夜就还回来。
Copyright © 2013-2020 idc10000.net. All Rights Reserved. 一万网络 科技有限公司 版权所有 深圳市科技有限公司 粤ICP备07026347号
本网站的域名注册业务代理北京新网数码信息技术有限公司的产品