Robey's kestrel at master - GitHub. Escalando sistemas com soluções NoSQL. Um dos grandes desafios enfrentados no dia a dia do desenvolvedor eficaz é o de cumprir requisitos não-funcionais de uma aplicação, principalmente os relacionados a performance e escalabilidade. Uma das alternativas mais conhecidas para escalar horizontalmente é a de dividir as tarefas que não necessitam de retorno imediato ao cliente em processos batch. Para tanto, podemos usar diversas ferramentas, desde soluções caseiras até diversos frameworks, tanto em ruby como em java. Quando se trata de processos batch, é comum buscar um controle mais fino sobre o resultado da execução (sucesso, falha, pendente, etc). Normalmente, usaríamos bancos relacionais para isso, tanto pela sua popularidade como pela performance. Supondo que eu precise gerenciar 1000 pequenas tarefas simultâneas, pagaríamos um preço bem alto pela concorrência, visto que o banco começaria a demorar para obter o lock, fazer o insert, refazer o lock e atualizar o status da tarefa.
E finalmente, faço o agendamento: Best practices for software development projects. © Copyright International Business Machines Corporation 2003. All rights reserved. Introduction Most software projects fail. In fact, the Standish group reports that over 80% of projects are unsuccessful either because they are over budget, late, missing function, or a combination. Moreover, 30% of software projects are so poorly executed that they are canceled before completion. In our experience, software projects using modern technologies such as Java, J2EE, XML, and Web Services are no exception to this rule.
This article contains a summary of best practices for software development projects. Back to top Best practices 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Conclusion This article provided a list of best practices that help improve the success of a software development project. Why writing software is not like engineering. Terence Parr [author of ANTLR parser generator etc...] This article popped up on reddit and news.ycombinator.com. In Romanian While my talent lies in software, my graduate studies were in computer engineering (designing and building digital computers).
One observation always struck me: computer engineering seemed more straightforward than computer science (building software). There are a set of engineering design rules to follow and engineering projects are much more likely to work out than software projects. Yes, there are some spectacular engineering failures but, empirically, reliable and useful software is more difficult to pull off. The Economist magazine (Nov 27, 2004 p. 71) cites the Standish Group's estimates that "...30% of all software projects are canceled, nearly half come in over budget, 60% are considered failures by the organizations that initiated them, and 9 out of 10 come in late. " Why is writing software not like engineering? Is software development a science?
Are You a Software Architect? Editors note: The author of this article, Simon Brown, will be presenting a tutorial at QCon London coming up this March on the same subject of this article, entitled Software Architecture for Developers. The line between software development and software architecture is a tricky one. Some people will tell you that it doesn't exist and that architecture is simply an extension of the design process undertaken by developers. Others will make out it's a massive gaping chasm that can only be crossed by lofty developers who believe you must always abstract your abstractions and not get bogged down by those pesky implementation details.
As always, there's a pragmatic balance somewhere in the middle, but it does raise the interesting question of how you move from one to the other. Experience is a good gauge but you need to look deeper Becoming a software architect isn't something that simply happens overnight or with a promotion. Definition of the software architecture About the Author. TestBus.pdf (objeto application/pdf)
Agilists and Architects: Allies not Adversaries Presentation. Agile Architecture: Strategies for Scaling Agile Development. 1. Towards Agile Architecture Architecture provides the foundation from which systems are built and an architectural model defines the vision on which your architecture is based. The scope of architecture can be that of a single application, of a family of applications, for an organization, or for an infrastructure such as the Internet that is shared by many organizations.Regardless of the scope, my experience is that you can take an agile approach to the modeling, development, and evolution of an architecture.
Here are a few ideas to get you thinking: There is nothing special about architecture. 2. Figure 1. Figure 2 depicts the agile/basic lifecycle described by the Disciplined Agile Delivery (DAD) framework. Figure 2. An alternative to this light-weight approach to initial architecture modeling, is to attempt to define your architecture completely before implementation begins. 3. This question is more complex than you think. Sometimes people don't agree. 4. 5. Figure 3. Figure 4. 6. Who Needs Architect - Martin Fowler. Joel on Software - Why I Hate Frameworks. I'm currently in the planning stages of building a hosted Java web application (yes, it has to be Java, for a variety of reasons that I don't feel like going into right now). In the process, I'm evaluating a bunch of J2EE portlet-enabled JSR-compliant MVC role-based CMS web service application container frameworks.
And after spending dozens of hours reading through feature lists and documentation, I'm ready to gouge out my eyes. Let's pretend I've decided to build a spice rack. I've done small woodworking projects before, and I think I have a pretty good idea of what I need: some wood and a few basic tools: a tape measure, a saw, a level, and a hammer. If I were going to build a whole house, rather than just a spice rack, I'd still need a tape measure, a saw, a level, and a hammer (among other things). So I go to the hardware store to buy the tools, and I ask the sales clerk where I can find a hammer. "A hammer? " Surprised at this development, I ask him why. "Hmmmmmm. "Really? "That's true. Scalable Web Architectures: Common Pa... Scalable Web Architectures... In this article we follow a hypothetical programmer, Damian, on his quest to make his web application scalable. Now fast forward to 2009.
Damian's site has evolved to a web game for playing dungeons online, in your browser. Damian is still using LAMP. Data about types of games (including parameters such as monster strength), user data (including status information), and data about active games (including players, the monters's health) are still stored in Mysql. It's all fine until there are only a few games in session and only a couple hundred players, but as the site gets popular, Damian's server is starting to see high load numbers. Damian is experiencing scalability issues --- his current setup cannot handle tens of thousands of users. Tweaking Mysql parameterstweaking Apache parametersmoving to a dedicated serverbuying more RAMdenormalizing tablesoptimizing SQL queriesoptimizing indexes As even more users register, the load is becoming unbearable.
Hold on a minute. . - Marton Trencseni. Presentation Summary “High Performanc... Recently, we were fortunate to host Jeff Rothschild, the Vice President of Technology at Facebook, for a visit for the CNS lecture series. Jeff’s talk, “High Performance at Massive Scale: Lessons Learned at Facebook” was highly detailed, providing real insights into the Facebook architecture.
Jeff spoke to a packed house of faculty, staff, and students interested in the technology and research challenges associated with running and Internet service at scale. The talk is archived here as part of the CNS lecture series. I encourage you to check it out; below are my notes on the presentation. Site Statistics: Photo sharing on Facebook: Facebook stores 20 billion photos in 4 resolutions2-3 billion new photos uploaded every monthOriginally provisioned photo storage for 6 months, but blew through available storage in 1.5 weeks.Facebook serves 600k photos/second –> serving them is more difficult than storing them. Scaling photos, first the easy way: Scaling photos, 2nd generation: Site Architecture. MapReduce: A Flexible Data Processing... By Jeffrey Dean, Sanjay Ghemawat Communications of the ACM, Vol. 53 No. 1, Pages 72-77 10.1145/1629175.1629198 Comments (3) Mapreduce is a programming model for processing and generating large data sets.4 Users specify a map function that processes a key/value pair to generate a set of intermediate key/value pairs and a reduce function that merges all intermediate values associated with the same intermediate key.
We built a system around this programming model in 2003 to simplify construction of the inverted index for handling searches at Google.com. Since then, more than 10,000 distinct programs have been implemented using MapReduce at Google, including algorithms for large-scale graph processing, text processing, machine learning, and statistical machine translation. the Hadoop open source implementation of MapReduce has been used extensively outside of Google by a number of organizations.10,11 Back to Top Compared to Parallel Databases We also discuss other important issues: Indices 1.