1. A method for performance bottleneck diagnosis and dependency discovery in distributed systems and computer networks, comprising: receiving a real-valued end-to-end measurement matrix, a number of end-to-end measurements, a number of time points, a number of network components, a loss function, and a plurality of constraints on output matrices, wherein, a number of columns of the real-valued end-to-end measurement matrix is the number of time points, a number of rows of the real-valued end-to-end measurement matrix is the number of end-to-end measurements, the network components include all components included in a distributed system or computer network, the end-to-end measurements are end-to-end measurements across at least a portion of the network components, and the loss function is defined in terms of the output matrices; learning basic output matrices by best approximation of a transpose of the real-valued end-to-end measurement matrix subject to the loss function and the constraints on the output matrices, wherein, the basic output matrices include a real-valued mixing-weights matrix and a real-valued delay matrix; selecting a first threshold based on the real-valued mixing-weights matrix and a second threshold based on the real-valued delay matrix; converting the real-valued mixing-weights matrix and the real-valued delay matrix into respective binary matrices using the first threshold and the second threshold; and returning the real-valued mixing-weights matrix, the real-valued delay matrix, and the respective binary matrices to represent bottlenecks and dependencies of the distributed system or computer network.