本文介绍架构的目的是什么,架构是解决什么问题。
架构的目的不是为了架构而架构,不是别人做了所以自己要做,不是为了技术自嗨。。。
架构的真正目的在于解决软件系统复杂度带来的问题。这条准则可以让新手架构心里有数,不会一头雾水,让老手架构有的放矢,不要贪大求全。
有了指导思想,让我们来举个例子,看如何将“解决软件系统复杂度带来的问题”应用到实践。
简单复杂度分析案例
假设我们需要设计一个大学的学生管理系统,其基本功能包括登录、注册、成绩管理、课程管理等。当我们对这样一个系统进行架构设计的时候,首先应识别其复杂度到底体现在哪里,从下面几个角度全方位考虑。
1、性能
学校大约1 ~ 2万人,平均每个学生访问系统不超过一次,所以性能上不复杂,存储用MySQL,服务器用Nginx,缓存是不需要的。
2、扩展性
学校系统功能稳定,可扩展的空间并不大,因此可扩展性也不复杂。
3、可用性
学校管理系统没有太高的可用性要求,即使服务器发生宕机1 ~ 2个小时也是没有问题的。不过,数据存储可靠性上有要求,不能容忍丢失大量数据。所以要考虑多种异常情况,比如机器故障,机房故障等。对于机器故障,可以考虑MySQL同机房主备;对于机房故障,可以做MySQL跨机房备份。
4、安全性
学生的信息还是有一定的隐私性的,但没有不要求像银行、金融那样的高安全性。只需要采用密码登录、HTTPS通信、数据库访问权限控制等方案就行。
5、成本
由于系统简单,访问量和存储数据量都不大,所以基本几台服务器就可以搞定。
架构设计中,常见的几个考虑点:
1、性能
(1)访问量或并发量。确认日平均访问量,并判断是否存在高并发,短时间大流量(高峰期)情况,高峰期流量多少。
(3)响应速率。是否有低延迟要求,延迟要求是秒级还是分钟级。
2、可用性
(1)服务可用。可以容忍服务器宕机多长时间,1分钟还是1小时。
(2)存储可用。可以容忍多少数据丢失,一部分还是大量。
3、扩展性
(1)功能扩展。是否方便支持新的功能加入。
(2)水平或垂直扩展。是否支持增加相同功能的服务器(水平)或增加提供不同功能的服务器(垂直)。
4、安全性
看业务场景提供多高级别的安全性。
5、成本
在可行的方案中选择成本较低的。当然,如果资金足够且业务重要,可以选择成本高些的更可靠的方案。
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/
我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails
我正在开发一个Rails应用程序,我需要在其中找到给定特定偏移量或时区的夏令时开始和结束日期。我基本上在我的数据库中保存了从用户浏览器接收到的时区偏移量(“+3”,“-5”),我想在它出现时修改它由于夏令时的变化。我知道Time实例变量有dst?和isdst方法,如果存储在它们中的日期在夏令时与否。>Time.new.isdst=>true但是使用它来查找夏令时的开始和结束日期会占用太多资源,而且我还必须为我拥有的每个时区偏移量执行此操作。我想知道更好的方法。 最佳答案 好的,基于你所说的和@dhouty'sanswer:您希望能够
我有一台生产机器和一台开发机器,都运行ubuntu8.10并且都运行最新的phusionpassenger。当我在osx上的本地开发机器上使用ruby1.9.1时,我想知道外面的人是否已经在使用带有ruby1.9.1甚至1.9.2的phusionpassenger?如果是这样,请告诉我们您的设置!此外,有没有办法在apache上使用phusionpassenger同时运行ruby1.8.7(ree)和1.9.1?感谢您的指点,我在任何地方都找不到任何提示... 最佳答案 是的,从某些2.2.x版本开始就正式支持它,我不记
date_select方法只能设置:start_year,但我想设置开始日期(例如3个月前的日期)(但没有这样的选项)。那么,我可以将开始日期设置为date_select方法吗?或者,要制作这样的选择框,我应该使用select_tag和options_for_select吗?或者,有什么解决办法吗?谢谢, 最佳答案 有可能……例如:start_year–设置年份选择的开始年份。默认为Time.now.year-5参见thisresource. 关于ruby-Rails3-我可以将开始日期
我想从特定索引开始遍历数组。我该怎么做?myj.eachdo|temp|...end 最佳答案 执行以下操作:your_array[your_index..-1].eachdo|temp|###end 关于ruby-从特定索引开始迭代数组,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/44151758/
我有一些使用delayed_job的小程序。在我的本地主机上一切正常,但是当我将我的应用程序部署到Heroku并单击应该由delayed_job执行的链接时,没有任何反应,“任务”只是保存到表delayed_job中。Inthisarticleonherokublog写入时,执行delayed_job表中的任务,当运行此命令时rakejobs:work。但是我怎样才能运行这个命令呢?命令应该放在哪里?在代码中,还是从终端控制台? 最佳答案 如果您正在运行Cedar堆栈,请从终端控制台运行以下命令:herokurunrakejobs:
嗨,我正在使用rolify,只是意识到我并没有真正利用它的全部潜力。目前,我正在Controller中执行某些操作,如current_user.has_role?:whatever_role重新路由用户,并允许用户担任其他角色……有人问了有关rolify的stackoverflow问题,当我要回答它时,我意识到我做错了。现在,这是我的困惑开始的地方...在capability.rb中,我有:user||=User.new#guestuser(notloggedin)ifuser.has_role?:consumercan:manage,Reviewelsecan:read,Review
我知道Rake代表RubyMake,我知道Make是一个unix构建实用程序。现在,我在Xcode工作,将iPhone应用程序构建到Ruby,所以我以前从未使用过Make,我唯一一次使用rake是在rails中或安装一些第三方包时,我输入了像rakedb这样的命令:迁移。我不明白的是……构建实用程序到底是什么?rake的目的是什么?它让我做什么?因此,如果有人能帮我回答这些问题中的任何一个,我将不胜感激。 最佳答案 Rake允许您在每个项目的基础上编写某些任务的脚本,就像Makefile允许Unix开发人员编写他们的编译和构建过程的
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。多年来,我一直在使用多种语言进行编程,并且认为自己总体上相当擅长。但是,我从未编写过任何自动化测试:没有单元测试,没有TDD,没有BDD,什么都没有。我已经尝试开始为我的项目编写适当的测试套件。我可以看到在进行任何更改后能够自动测试项目中所有代码的理论值(value)。我可以看到像RSpec和Mocha这样的测试框架应该如何使设置和运行所述测试变得相当容易