RSS feed [root] /weblog /design




login:

password:

title search:




 


Thu Apr 06 06:32:51 GMT 2023

design



(google search) (amazon search)
second
download zip of files only

Thu May 07 12:31:36 GMT 2020 From /weblog/design/distribute

event


Event Bus Implementation(s) - https://hackernoon.com/event-bus-implementation-s-d2854a9fafd5 http://www.infoq.com[..]2017/08/Summary-event-bus-implementation

http://jakewharton.com/managing-the-reactive-world-with-rxjava/

6 Event-Driven Architecture Patterns — https://medium.com[..]rchitecture-patterns-part-1-93758b253f47

(google search) (amazon search)


Sat Mar 28 12:09:46 GMT 2020 From /weblog/design/distribute

scalability


There are two key primary ways of scaling web applications which is in practice today.
1) “Vertical Scalability” - Adding resource within the same logical unit to increase capacity. An example of this would be to add CPUs to an existing server, or expanding storage by adding hard drive on an existing RAID/SAN storage.
2) “Horizontal Scalability” - Adding multiple logical units of resources and making them work as a single unit. Most clustering solutions, distributed file systems, load-balancers help you with horizontal scalability.

Scalability can be further sub-classified based on the “scalability factor”.
1) If the scalability factor stays constant as you scale. This is called “linear scalability“.
2) But chances are that some components may not scale as well as others. A scalability factor below 1.0 is called “sub-linear scalability“.
3) Though rare, its possible to get better performance (scalability factor) just by adding more components (i/o across multiple disk spindles in a RAID gets better with more spindles). This is called “supra-linear scalability“.
4) If the application is not designed for scalability, its possible that things can actually get worse as it scales. This is called “negative scalability“.

http://www.royans.net/arch/2007/09/22/what-is-scalability/

Report of building web application with 55k pageload with rail - http://shanti.railsblog.com[..]mongrels-handled-a-550k-pageview-digging

XMPP a IM protocol about scalability - http://www.process-one.net[..]icle/the_aol_xmpp_scalability_challenge/

Presentation and resources of making you website more scalable - http://www.scribd.com[..]9/Real-World-Web-Performance-Scalability http://www.theserverside.com[..]lications&asrc=EM_NLN_3990118&uid=703565 http://www.theserverside.com[..]ionsPart2&asrc=EM_NLN_3990119&uid=703565

Brian Zimmer, architect at travel startup Yapta, highlights some worst practices jeopardizing the growth and scalability of a system:
* The Golden Hammer. Forcing a particular technology to work in ways it was not intended is sometimes counter-productive. Using a database to store key-value pairs is one example. Another example is using threads to program for concurrency.
* Resource Abuse. Manage the availability of shared resources because when they fail, by definition, their failure is experienced pervasively rather than in isolation. For example, connection management to the database through a thread pool.
* Big Ball of Mud. Failure to manage dependencies inhibits agility and scalability.
* Everything or Something. In both code and application dependency management, the worst practice is not understanding the relationships and formulating a model to facilitate their management. Failure to enforce diligent control is a contributing scalability inhibiter.
* Forgetting to check the time. To properly scale a system it is imperative to manage the time alloted for requests to be handled.
* Hero Pattern. One popular solution to the operation issue is a Hero who can and often will manage the bulk of the operational needs. For a large system of many components this approach does not scale, yet it is one of the most frequently-deployed solutions.
* Not automating. A system too dependent on human intervention, frequently the result of having a Hero, is dangerously exposed to issues of reproducibility and hit-by-a-bus syndrome.
* Monitoring. Monitoring, like testing, is often one of the first items sacrificed when time is tight.

http://highscalability.com/scalability-worst-practices

Useful Corporate Blogs that Talk About Scalability - http://highscalability.com[..]l-corporate-blogs-talk-about-scalability

Overview of mapreduce and how it compare with other distributed programming model -http://natishalom.typepad.com[..]0/is-mapreduce-going-to-main-stream.html

Paper of data store at amazon http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html

Discuss how haven't sync can cause performance issue - http://www.theserverside.com[..]lications&asrc=EM_NLN_6273194&uid=703565 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6423457

Discussion about Cloud Based Memory Architectures - http://highscalability.com[..]ased-memory-architectures-next-big-thing

http://highscalability.com[..]alability-and-performance-best-practices

Interview with google engineer - http://www.zdnet.co.uk[..]gle-at-scale-everything-breaks-40093061/

Surprisingly youtube is blocking - http://highscalability.com[..]e-scalability-lessons-in-30-minutes.html

If we are seeing a sustained arrival rate of requests, greater than our system is capable of processing, then something has to give. Having the entire system degrade is not the ideal service we want to give our customers. A better approach would be to process transactions at our systems maximum possible throughput rate, while maintaining a good response time, and rejecting requests above this arrival rate. - http://mechanical-sympathy.blogspot.com.au[..]apply-back-pressure-when-overloaded.html

How twitter scaling - http://www.infoq.com/presentations/Twitter-Analytics

How Reddit scaling - http://www.infoq.com/presentations/scaling-reddit

How Hotjar scaling - https://www.hotjar.com[..]-while-scaling-hotjars-tech-architecture

How infiniteDB prevent locking and IO - http://highscalability.com[..]-scalable-relational-database-manag.html

http://highscalability.com[..]ard-way-about-scaling-a-million-use.html http://martin.kleppmann.com[..]2014/03/26/six-things-about-scaling.html

The experiences of various big companies, about network issues - http://aphyr.com/posts/288-the-network-is-reliable

Stackoverflow, scale without cloud - http://highscalability.com[..]nth-25-servers-and-i.html?SSLoginOk=true

How netflix scale - http://highscalability.com[..]ix-what-happens-when-you-press-play.html

Scaling to 100k Users - https://alexpareto.com[..]ity/systems/2020/02/03/scaling-100k.html https://www.infoq.cn/article/Tyx5HwaD9OKNX4xzFaFo

(google search) (amazon search)


Sun Mar 15 23:47:36 GMT 2020 From /weblog/design

Object attributes


About getter and setter - http://blog.milesbarr.com/2006/09/getters-and-setters/

Discussion of hashcode and equal of collections - http://redsolo.blogspot.com[..]11/why-no-equals-and-gethashcode-in.html

A blog discuss the problem of getter / setter - http://jroller.com[..]rise?entry=the_case_against_the_property

Equality Is Hard - https://www.craigstuntz.com[..]m/posts/2020-03-09-equality-is-hard.html

(google search) (amazon search)


Wed Mar 04 00:23:59 GMT 2020 From /weblog/design

functional


Having functional program in java? http://codemonkeyism.com/functional-programming/

Functional programming in old java, with eclipse template - http://www.javacodegeeks.com[..]functional-programming-with-map-and.html

Functional Programming For The Rest of Us - http://www.defmacro.org/ramblings/fp.html?

collection-pipeline - http://martinfowler.com/articles/collection-pipeline/

Make code composable - https://hackernoon.com[..]ical-functional-programming-6d7932abc58b

A primer on functional architecture - https://increment.com[..]cture/primer-on-functional-architecture/

(google search) (amazon search)


Sat Nov 16 12:30:12 GMT 2019 From /weblog/design/examples

web


https://codurance.com[..]ites-using-finite-state-machines-part-I/

(google search) (amazon search)


Fri Sep 06 12:54:59 GMT 2019 From /weblog/design/examples

Serialization


What serialization is bad - http://cr.openjdk.java.net/~briangoetz/amber/serialization.html

(google search) (amazon search)



Thu May 23 14:45:47 GMT 2019 From /weblog/design

camera


軟體相機時代來臨!Google Pixel 工程師來台揭秘相機技術 - https://www.inside.com.tw[..]cle/16465-google-pixel-camera-background

(google search) (amazon search)


Wed Feb 20 03:22:20 GMT 2019 From /weblog/design/distribute

performance


Basically, cache as much as you can, limit the bandwidth as much as you can - http://horicky.blogspot.com[..]2009/08/skinny-straw-in-cloud-shake.html

http://www.edwardcapriolo.com[..]ry/cassandra_compression_is_like_getting

Compression usually very useful - http://abdullin.com[..]observations-on-big-data-for-retail.html

Discussion of design of Aeron, a new messaging system - http://highscalability.com[..]eally-need-another-messaging-system.html

How BBG use Hadoop, and tune it - http://highscalability.com[..]2/17/the-big-problem-is-medium-data.html

Benefits of single-threaded design - https://epickrram.blogspot.com/2019/02/recall-design.html

(google search) (amazon search)


Mon Jan 21 14:35:44 GMT 2019 From /weblog/design/pattern

active


https://codurance.com/2019/01/14/active-pattern/

(google search) (amazon search)


Sat Nov 24 14:52:19 GMT 2018 From /weblog/design

wechat


https://blog.acolyer.org[..]ontrol-for-scaling-wechat-microservices/

http://www.10tiao.com/html/554/201811/2654694647/1.html

(google search) (amazon search)


Sat Nov 10 16:56:20 GMT 2018 From /weblog/design/exception

Why use exception instead of error code


A detailed explanation - http://gamearchitect.net/Articles/ExceptionsAndErrorCodes.html

What are exceptions? - https://binkley.blogspot.com/2018/11/what-are-exceptions.html

(google search) (amazon search)


Sat Feb 24 15:42:46 GMT 2018 From /weblog/design/interview

facebook


Do the simple thing first.
Do fewer things better.
Upfront work but can pay huge dividends.
Don’t reinvent the wheel.
Nothing lasts forever.

http://highscalability.com[..]-from-5-years-of-building-instagram.html

https://www.infoq.com/interviews/adams-php-facebook

(google search) (amazon search)


Fri Feb 02 02:19:00 GMT 2018 From /weblog/design/interview

wechat


http://www.infoq.com/cn/articles/wechat-video-call

(google search) (amazon search)


Thu Nov 16 01:55:26 GMT 2017 From /weblog/design

static


I will prefer using static method as less as possible... there is some
side effect you are not expected, like, are you sure it thread safe? static
method easier to have thread problem.

You may take a look at http://debasishg.blogspot.com[..]007/03/making-classes-unit-testable.html , http://www.beust.com/weblog/archives/000173.html and http://discuss.joelonsoftware.com[..]Parent=7972&ixDiscussGroup=3&cReplies=29

Parameter passing vs static accessor: Should I press things around or get from public static instance? - http://groups.yahoo.com/group/refactoring/message/3342

Reason of static method is not overrided - http://groups.google.com[..]thread/ec8b924d60dd4734/99b488aa1f8106c9

Another example of thread problem with static member - http://jroller.com[..]=calendar_dateformat_and_multi_threading

How to mock static method code for testing - http://blog.xebia.com/2007/06/21/mocking-static-calls/

http://googletesting.blogspot.com[..]ic-methods-are-death-to-testability.html

Factory is bad? - http://www.yegor256.com/2017/11/14/static-factory-methods.html

(google search) (amazon search)


Sun Oct 01 08:19:43 GMT 2017 From /weblog/design

comment


A nice thread of discussing how to comment in code - http://groups.yahoo.com/group/extremeprogramming/message/74195

A Taxonomy Of Comments - http://blog.codefx.org[..]hniques/documentation/taxonomy-comments/

Everything have 2 sides - http://blog.codefx.org[..]s/documentation/comments-costs-benefits/

Example of comment haven't update freq enough - http://marxsoftware.blogspot.hk[..]even-good-code-comments-deteriorate.html

https://testing.googleblog.com[..]health-to-comment-or-not-to-comment.html

Putting comments in code: the good, the bad, and the ugly. - https://medium.freecodecamp.org[..]e-good-the-bad-and-the-ugly-be9cc65fbf83

(google search) (amazon search)


Tue Aug 29 02:34:21 GMT 2017 From /weblog/design

documentation


Comment about the java document of jdk8 - http://marxsoftware.blogspot.com.au[..]14/03/illuminating-javadoc-of-jdk-8.html

Thoughts On Comments - http://blog.codefx.org[..]ques/documentation/thoughts-on-comments/

The Art of Crafting Architectural Diagrams - https://www.infoq.com/articles/crafting-architectural-diagrams http://www.infoq.com/cn/articles/crafting-architectural-diagrams

(google search) (amazon search)


Wed Aug 09 03:37:20 GMT 2017 From /weblog/design

null


Use present and absent rather than NULL - http://binkley.blogspot.com/2012/01/better-than-null.html

Propose of enhancement, null handelers and null reference - http://shemnon.com[..]01/null-handelers-and-null-refere-1.html

How null breaks polymorphism - http://eureka3d.com[..]s-polymorphism-or-the-problem-with-null/ http://eureka3d.com[..]orphism-or-the-problem-with-null-part-2/

Discussion about forbid NULL as parameter and return - http://javablog.co.uk[..]5/07/null-parameters-and-returning-null/

Default object in C# - http://www.kodefuguru.com[..]t/2012/09/25/Default-Objects-with-C.aspx

Discussion about using optional - http://blog.jooq.org/2015/08/20/divided-we-stand-optional/

Some suggest about do something better than use null - https://blog.jetbrains.com/idea/2017/08/code-smells-null

(google search) (amazon search)


Wed Jul 19 06:59:51 GMT 2017 From /weblog/design

packaging


Avoid circular dependencies between packages! http://www.infoq.com/news/2007/06/large-code-bases

2 common approach, by function or by layer - http://dolszewski.com/architecture/project-package-organization/

(google search) (amazon search)


Thu Mar 09 15:13:09 GMT 2017 From /weblog/design

visibility


Someone saying that having private method is anti-pattern, here is the discussion - http://www.infoq.com/news/2008/01/private-methods-tdd-design

Discussion of encapsulation - http://niket-this.blogspot.com[..]/encapsulation-does-it-really-exist.html

My view on this is that most of the time there's little value in self-encapsulation. The value of encapsulation is proportional to the scope of the data access. Classes are usually small (at least mine are) so direct access isn't going to be an issue within that scope. Most accessors are simple assignments for the setter and retrieval for the getter, so there's little value in using them internally. - https://martinfowler.com/bliki/SelfEncapsulation.html

(google search) (amazon search)


Thu Feb 23 08:14:03 GMT 2017 From /weblog/design/interview

data


Interview with JOOQ founder - https://www.infoq.com/news/2017/02/data-geekery-releases-jooq-3-9

(google search) (amazon search)


Tue Feb 21 09:44:20 GMT 2017 From /weblog/design

dsl


A paper show the evolution of a DSL - http://www.mockobjects.com/files/evolving_an_edsl.ooplsa2006.pdf

A stock trading order example of DSL - http://debasishg.blogspot.com[..]05/designing-internal-dsls-in-scala.html

What is the difference between API / DSL if we don't write a parser for our language? From Martin Fowler's blog - http://martinfowler.com/bliki/DslReadings.html , it is mentioned:
Piers Cawley makes the point that a key characteristic of DSLs is their narrow focus on a domain.
I think this is a very good summary, usually if most of the APIs are getXXX() , setXXX(), loadXXX() , createXXX() ........ Then we mostly design APIs that expose low level detail to the API user to work on, which, is work but user probably work nicer if we can come up with language like API that allow users to do their work in more descriptive level.

I think if API design like that usually it will reduce the code duplication, what ever real duplication or conceptual duplication. It probably already apply "Tell, don't ask" style - http://c2.com/cgi/wiki?TellDontAsk

A discussion about applying "Tell, don't ask" which lead to message passing architecture - http://beautifulcode.oreillynet.com[..]07/10/do_messages_want_to_be_asynchr.php

And other discussion about "Tell, don't ask"
http://sriramnarayan.blogspot.com[..]/2008/11/demeters-law-tell-dont-ask.html
http://sriramnarayan.blogspot.com[..]part-two-demeters-law-tell-dont-ask.html
http://sriramnarayan.blogspot.com[..]rt-three-demeters-law-tell-dont-ask.html

One good sample with explaination -
http://hamletdarcy.blogspot.com[..]-it-really-domain-specific-language.html
http://nat.truemesh.com/archives/000727.html

Few links - http://dreamhead.blogbus.com/logs/17667876.html

From CRUD to DDD - http://www.udidahan.com[..]2/15/from-crud-to-domain-driven-fluency/

I like this: "XML abuse reduction (conducting an “XML Intervention”)" - http://www.lostechies.com[..]ps-internal-dsl-draft-outline-notes.aspx

DSL maybe the result of encapsulation - http://dreamhead.blogbus.com/logs/214225975.html

Excellent implementation of extending java yourself - http://www.infoq.com/presentations/JetBrains-MPS-DSL http://www.infoq.com/presentations/JetBrains-MPS-DSL-2

How DSL method named - http://tech.pro[..]he-java-fluent-api-designer-crash-course

https://tomassetti.me/domain-specific-languages/

(google search) (amazon search)


Wed Feb 15 16:03:22 GMT 2017 From /weblog/design/pattern

reactive


https://realm.io[..]ation-hugo-visser-rxjava-for-rest-of-us/

(google search) (amazon search)


Mon Jan 23 10:33:07 GMT 2017 From /weblog/design

thread


Stealing thread - http://badamczewski.blogspot.com.au/2012/05/work-stealing.html

Intel Guide for Developing Multithreaded Applications - http://software.intel.com[..]or-developing-multithreaded-applications

Difference ways to stop a thread - http://www.ddj.com[..]ept_url=/hpc-high-performance-computing/

Interesting, I am not sure if I agree, but chrome ( which use fork ) are really cool in performance:
There’s another problem with Unix programming in Ruby that I’ll just touch on briefly: Java people and Windows people. They’re going to tell you that fork(2) is bad because they don’t have it on their platform, or it sucks on their platform, or whatever, but it’s cool, you know, because they have native threads, and threads are like, way better anyways.

Fuck that.

Don’t ever let anyone tell you that fork(2) is bad. Thirty years from now, there will still be a fork(2) and a pipe(2) and a exec(2) and smart people will still be using them to solve hard problems reliably and predictably, just like they were thirty years ago.

MRI Ruby people need to accept, like Python (you have seen multiprocessing, yes?), that Unix processes are one of two techniques for achieving reliable concurrency and parallelism in server applications. Threads are out. You can use processes, or async/events, or both processes and async/events, but definitely not threads. Threads are out.
http://tomayko.com/writings/unicorn-is-unix

1x1 win M*N - http://binkley.blogspot.com/2012/01/1-1-beats-n-m.html

Best number of threads:
N = number of CPUs
U = target CPU utilization (0 <= U <= 1)
W/C = ration of wait time to cpu time (measured through profiling)

threads = N * U * (1 + W/C) - http://www.ibm.com/developerworks/library/j-jtp0730.html http://stackoverflow.com[..]ratio-of-java-threads-to-cpus-on-solaris

Another post about tuning thread pool - http://www.javaadvent.com[..]ortance-of-tuning-your-thread-pools.html

Threads Basics - http://www.hpl.hp.com/techreports/2009/HPL-2009-259html.html http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/threadsintro.html

The Dos and Don'ts of Multithreading - http://www.infoq.com/presentations/multithreading

https://www.infoq.com/articles/engstrand-microservice-threading

http://cbloomrants.blogspot.hk[..]-26-09-low-level-threading-table-of.html

(google search) (amazon search)


Tue Jan 17 15:09:08 GMT 2017 From /weblog/design

gc


https://blog.plan99.net[..]rbage-collection-911ef4f8bd8e#.wr03zaasu

(google search) (amazon search)